Python 如何查找和附加列表中存在的字典值

Python 如何查找和附加列表中存在的字典值,python,Python,我有一个具有唯一排序值的列表 arr = ['Adam', 'Ben', 'Chris', 'Dean', 'Flower'] 我有一本字典,里面有这样的值 dict = { 'abc': {'Dean': 1, 'Adam':0, 'Chris':1}, 'def': {'Flower':0, 'Ben':1, 'Dean':0} } 通过查看arr中的值,我需要得到每个项目,如果该值在后续较小的dict中不存在,则应分配一个值-1 结果 dict = { 'abc': {'A

我有一个具有唯一排序值的列表

arr = ['Adam', 'Ben', 'Chris', 'Dean', 'Flower']
我有一本字典,里面有这样的值

dict = {
  'abc': {'Dean': 1, 'Adam':0, 'Chris':1},
  'def': {'Flower':0, 'Ben':1, 'Dean':0}
}
通过查看arr中的值,我需要得到每个项目,如果该值在后续较小的dict中不存在,则应分配一个值-1

结果

dict = {
  'abc': {'Adam':0, 'Ben':-1, 'Chris':1, 'Dean': 1, 'Flower':-1},
  'def': {'Adam':-1, 'Ben':1, 'Chris':-1, 'Dean': 0, 'Flower':0}
}
如何使用python中的列表和dict理解来实现这一点

dd = {
    key: {k: value.get(k, -1) for k in arr}
    for key, value in dd.items()
}
{k:value.get(k,-1)for k in arr}
将确保密钥的顺序与您在
arr
列表中定义的顺序相同


关于钥匙顺序的旁注

字典保留插入顺序。请注意,更新密钥不会 不影响秩序。删除后添加的键将插入到 结束

在版本3.7中更改:保证插入字典顺序 秩序。此行为是3.6中CPython的一个实现细节


请不要创建名为
dict
的变量,将其重命名为
dct
或其他名称,因为
dict
是一个保留的python内部变量。 至于您的问题:只需迭代您的
dct
,并使用
setdefault
添加缺少的密钥:

arr = ['Adam', 'Ben', 'Chris', 'Dean', 'Flower']


dct = {
  'abc': {'Dean': 1, 'Adam':0, 'Chris':1},
  'def': {'Flower':0, 'Ben':1, 'Dean':0}
}

def add_dict_keys(dct, arr):
    for key in arr:
        dct.setdefault(key, -1)
    return dct

for k, v in dct.items():
    add_dict_keys(v, arr)

print(dct)  # has updated values

不要使用
dict
作为变量,因为
dict
是Python内置的。