我有员工轮类表和员工详细信息列表。如何将他们的姓氏添加到名单中?
实际的轮类表有数百个条目,其中同一个人有很多重复(但所有员工都有不同的名字),而详细信息列表有大约 100 个条目,并且可能没有一两个员工。
下面的代码可以工作,但会循环遍历每个轮换条目的所有详细信息。有没有更有效的方法(使用Python 2.7)并且我可以添加“?”如果没有找到该名称?
rota = [['Paul'], ['Paul'], ['Steve'], ['Steve'], ['Steve'], ['Simon'], ['Bob'], ['Steve']]
details = [['Paul', 'Smith'], ['Simon', 'Says'], ['Steve', 'Brown']]
for eachName in rota:
for eachEmployee in details:
if eachName[0] == eachEmployee[0]:
eachName.append(eachEmployee[1])
print rota
(抱歉,如果这令人困惑,这是我能想到的最简单的例子!)
最佳答案
您只需将详细信息
转换为字典即可:
rota = [['Paul'], ['Paul'], ['Steve'], ['Steve'], ['Steve'], ['Simon'], ['Bob'], ['Steve']]
details = dict([['Paul', 'Smith'], ['Simon', 'Says'], ['Steve', 'Brown']])
for eachName in rota:
surname = details.get(eachName[0])
if surname:
eachName.append(surname)
print(rota)
请注意,只剩下一个 for
循环,处理速度应该会快得多。
字典中的值可以是具有多个属性的元组:
>>> details = dict([['Paul', ('Smith', 32)], ['Simon', ('Says', 20)], ['Steve', ('Brown', 52)]])
>>> details
{'Steve': ('Brown', 52), 'Paul': ('Smith', 32), 'Simon': ('Says', 20)}
关于python - 如何使用另一个列表中的列表中找到的详细信息更新列表中的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46075280/