python - 如何使用另一个列表中的列表中找到的详细信息更新列表中的列表

标签 python

我有员工轮类表和员工详细信息列表。如何将他们的姓氏添加到名单中?

实际的轮类表有数百个条目,其中同一个人有很多重复(但所有员工都有不同的名字),而详细信息列表有大约 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/

相关文章:

python - 如何组合多个numpy掩码

python - onehotencoder 的 sklearn 掩码不起作用

python - tensorflow 中 LSTM 的多元输入

python - TypeError : 'ExistingCountries' object is not callable? , Discord.py 重写

Python Matplotlib : plot text will not align left

python - 可以访问所有节点的变形/漏勺验证器?

python - 从 URL 获取参数 slugs

python - Pandas 替换为字符串和整数 - 不正确的行为?

Python解码|字节转json

python - Cython:无法将 Python 对象转换为结构