如何在listdictionary中彻底搜索以获得正确的结果

2024-09-30 16:41:31 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的密码:

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]

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


Tags: 代码in密码for字典数字trackpass
3条回答

试试这个

In [4]: [j.get(i) for i,j in zip(listo,dicto)]
Out[4]: [4, 3, 1]

如果字典中不存在该值,它将返回None。你知道吗

另一个例子是价值,而不是出口。你知道吗

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

In [6]: [j.get(i) for i,j in zip(listo,dicto)]
Out[6]: [None, 3, 1]

您可以使用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)]
track = [dicto[index].get(value,None) for index,value in enumerate(listo)]
track = [item for item in track if item is not None]
print(track)
# [4, 3, 1]

这只检查特定索引处的键值。 没有列表理解

track = []
for index,value in enumerate(listo):
    val = dicto[index].get(value,None)
    if val is not None:
        track.append(val)
print(track)

相关问题 更多 >