我有三个词语dict_a
,dict_b
和dict_c
dict_a={'key1':a, 'key2':b, 'key3':c}
dict_b={'key1':a, 'key2':b, 'key4':d}
dict_c={'key3':c, 'key1':a, 'key5':e}
这里整体表示的键是:key1,key2,key3,key4,key5及其各自的值。
我正在寻找的是例如,创建一个新的dict(或保留dicts)并填写每个dict中缺少的键,与具有0值和键的整体键相比,例如:
dict_a={'key1':a, 'key2':b, 'key3':c, 'key4':0, 'key5':0}
dict_b={'key1':a, 'key2':b, 'key3':0, 'key4':d, 'key5':0}
dict_c={'key1':a, 'key2':b, 'key3':c, 'key4':0, 'key5':e}
我在C方面经验丰富,基于我在python中的“有限知识”,我会运行一个嵌套的for循环,用一堆if,else语句来解决这个问题,但是我所知道的是python有一些工具,例如。 zip
,lamda
等以简单的方式解决这个问题。但我不知道如何开始和开始,或者即使有一个库可以解决这个问题?
如果我用缺少的键创建新的dicts或者简单地替换现有的dict,它们都可以使用。
答案 0 :(得分:2)
你可以这样做:
all_keys = set(dict_a).union(dict_b, dict_c)
default = 0
dct_a = {key: dict_a.get(key, default) for key in all_keys}
print(dct_a) # {'key2': 'b', 'key4': 0, 'key5': 0, 'key1': 'a',
# 'key3': 'c'}
...等等其他词组。
一旦你收集了all_keys
,它只是一个单行来创建新词典。 dict.get
是属于密钥的值(如果存在)或者default
。
答案 1 :(得分:2)
您可以创建键的联合,然后只需创建包含您使用先前值更新的所有键的新词典。
all_keys = set(dict_a).union(dict_b, dict_c)
new_dict_a = dict.fromkeys(all_keys, 0)
new_dict_a.update(dict_a)
print(new_dict_a)
# {'key1': 'a', 'key2': 'b', 'key3': 'c', 'key4': 0, 'key5': 0}
其他决定同样如此:
new_dict_b = dict.fromkeys(all_keys, 0)
new_dict_b.update(dict_b)
new_dict_c = dict.fromkeys(all_keys, 0)
new_dict_c.update(dict_c)
dict.fromkeys
创建一个新字典,其中包含所有具有默认值的指定键(在本例中为0
),然后update
将覆盖原始字典中已有的值
答案 2 :(得分:0)
keys=set(dict_a).union(dict_b, dict_c)
for a in keys:
if a not in dict_a.keys():
dict_a[a]=0
if a not in dict_b.keys():
dict_b[a]=0
if a not in dict_c.keys():
dict_c[a]=0
使用集合来避免重复,我们获得所有密钥。现在我们知道了所有的钥匙。现在我们检查这些键中是否有任何键都没有,如果不是,我们将它们添加为值0.这将给出你想要的输出