首页 > 解决方案 > 如何在列表词典中彻底搜索以获得正确的结果

问题描述

这是我的代码:

dicto = [{100: 1, 90: 2, 80: 3, 70: 4}, {100: 1, 90: 2, 80: 3}, {105: 1, 100: 2, 90: 3, 80: 4}]
listo = [70,80,105]
track = []
for y in dicto:
    for x in listo:
        try:
           track.append(y[x])
        except KeyError:
           pass
print(track)

我想要做的是使用“listo”中的数字作为键来获取正确的值。listo 中的第一个数字只能在 'dicto' 中的第一个字典中搜索。listo 中的第二个数字只能在 dicto 中的第二个字典中搜索,而不能在第一个字典或第三个字典中搜索。listo 中的第三个数字也只能在 dicto 中的第三个字典中搜索,而不能在其他字典中搜索。

输出应该是这样的:

[4,3,1]

但我的代码正在返回:

[4,3,3,4,1]

如何修复我的代码以在 Python 3.x 中提供正确的输出

标签: pythonlistdictionary

解决方案


您可以使用zip.

dicto = [{100: 1, 90: 2, 80: 3, 70: 4}, {100: 1, 90: 2, 80: 3}, {105: 1, 100: 2, 90: 3, 80: 4}]
listo = [70,80,105]

track = []
for key, d in zip(listo, dicto):
    try:
        track.append(d[key])
    except KeyError:
        pass

print(track)
# [4, 3, 1]

如果您想None在缺少键的情况下作为值,则可以使用:

track = [d.get(key) for key, d in zip(listo, dicto)]

推荐阅读