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内置的。