我是python的初学者。在使用正则表达式编写一长串代码后,我得到了类似的内容。基本上,我通过使用某种循环来创建字典。字典具有相同的名称,但只有数据不同。
my_dict= {'A':{'1':'a','2':'b'}} # created by loop1
my_dict= {'B':{'11':'ab','32':'pb'}} # created by loop2
my_dict= {'C':{'3':'sd','34':'cb'}} # created by loop3
现在作为最后的词典,我想只获得一个包含上述词典所有数据的大词典。我想要这本大词典,因为将来我会把它与其他大词典进行比较。
所以我的预期结果看起来像
my_dictionary={'A':{'1':'a','2':'b'} , 'B':{'11':'ab','32':'pb'} , 'C':{'3':'sd','34':'cb'} }
答案 0 :(得分:2)
只需使用update():
>>> my_dict= {'C':{'3':'sd','34':'cb'}} # created by loop3
>>> my_big_dict = {}
>>> my_big_dict.update(my_dict)
>>> my_big_dict
{'C': {'3': 'sd', '34': 'cb'}}
循环示例:
my_big_dict = {}
for i in range(0, 10):
# create your dict
my_dict= {'A':{'1':'a','2':'b'}}
my_big_dict.update(my_dict)
<小时/> 要安全地更新字典的键,即。如果你知道你有多个具有不同值的键,例如:
[{'A':{'1':'a','2':'b'}},
{'A':{'3':'Z'}}]
使用:
dicts = [
{'A':{'1':'a','2':'b'}},
{'B':{'11':'ab','32':'pb'}},
{'C':{'3':'sd','34':'cb'}},
{'A':{'3':'Z'}},
{'C':{'6':'sd','7':'cb'}},
{'A':{'3':'XX'}},]
for d in dicts:
for key, values in d.iteritems():
if my_big_dict.has_key(key):
my_big_dict[key].update(values)
break
my_big_dict.update(d)
print my_big_dict
#=> {'A': {'1': 'a', '3': 'Z', '2': 'b'}, 'C': {'3': 'sd', '6': 'sd', '7': 'cb', '34': 'cb'}, 'B': {'11': 'ab', '32': 'pb'}}
仅使用my_big_dict.update(your_dict)
将覆盖存储的字典,因此您需要处理密钥已存在的情况。
答案 1 :(得分:0)
您可以尝试以下操作。在进入循环之前,创建一个空的字典实例。
my_dictionary = dict()
在遍历循环时只需受理人字典键/值对。
my_dictionary['A'] = {'1':'a','2':'b'}
my_dictionary['B'] = {'11':'ab','32':'pb'}
my_dictionary['C'] = {'3':'sd','34':'cb'}
>>> my_dictionary
{'A': {'1': 'a', '2': 'b'}, 'C': {'3': 'sd', '34': 'cb'}, 'B': {'11': 'ab', '32': 'pb'}}
答案 2 :(得分:0)
如果我们假设每个字典的名称都有一个计数器后缀:
my_dict1= {'A':{'1':'a','2':'b'}} # created by loop1
my_dict2= {'B':{'11':'ab','32':'pb'}} # created by loop2
my_dict3= {'C':{'3':'sd','34':'cb'}} # created by loop3
my_dictionary = dict()
for i in range(0, 3):
my_dictionary.update(eval('my_dict%d' %(i+1)))