比较字典和字典列表Python

时间:2020-06-29 16:16:45

标签: python list dictionary compare

我是Python的新手。

我正在尝试将字典结果与字典 d 进行比较。如果它等于列表 d 中的字典(除了缺少结果的“名称”键),我应该打印其中一个值(名称),如果不相等则不打印-不匹配。

尤其是: d -词典列表:

[OrderedDict([('name', 'Alice'), ('AAA', '2'), ('BBB', '8'), ('CCC', '3')]), OrderedDict([('name', 'Bob'), ('AAA', '4'), ('BBB', '1'), ('CCC', '5')]), 
OrderedDict([('name', 'Charlie'), ('AAA', '3'), ('BBB', '2'), ('CCC', '5')])]

结果-字典:

{'AAA': 4, 'BBB': 1, 'CCC': 5}

由于 results 与字典列表 d 的相似部分相同,因此我应该在该diction列表中返回“ name”(在这种情况下为Bob)

我正在尝试下面的代码,但似乎不起作用:

for i in range(len(d)):
    if key in d[i] != 'name':
        for k, v in results.items and d[i].items():
            if results.items() == d[i].items():
                print(d[i]['name'])
else:
    print("No match")

如果您能提供一些更简单,更详细的解释,我会很高兴,因为我还没有进一步介绍:)

谢谢!

2 个答案:

答案 0 :(得分:1)

这里是单线:

next((x["name"] for x in d
      if results == {k: int(v) for k, v in x.items() if k != 'name'}),
     "No match")
# Output: 'Bob'

好的,这并不是很有帮助。让我们调试代码。

for k, v in results.items and d[i].items():
    if results.items() == d[i].items():

您的代码中的问题是您正在比较键-值对列表作为序列。不能保证常规字典(non-OrderedDict)会以与OrderedDict相同的顺序为您提供.items()。取而代之的是,您可以说(有一点点的字典理解:

if {k: int(v) for k, v in d[i].items() if k != 'name'} == result:
    print(d[i]["name"])

PS:请使用稍微好一点的for item in items: something(item)而不是for i in range(len(items)): something(items[i])构造。结合一点清单/字典理解,您将在第一行得到答案。 :)

答案 1 :(得分:1)

易于理解:

done = False
for di in d:
    l = list(di.values())
    l.pop(0)
    l = [int(i) for i in l]
    if l == list(results.values()):
        print(di['name'])
        done = True
if done == False:
    print('no match found')

结果字典的输出:

Bob