比较基于键的dicts并使用缺少的键创建一个新的dict,在python3中使用0值

时间:2017-06-21 06:27:07

标签: python python-3.x dictionary

我有三个词语dict_adict_bdict_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有一些工具,例如。 ziplamda等以简单的方式解决这个问题。但我不知道如何开始和开始,或者即使有一个库可以解决这个问题?

如果我用缺少的键创建新的dicts或者简单地替换现有的dict,它们都可以使用。

3 个答案:

答案 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.这将给出你想要的输出