在python中编辑字典

时间:2014-09-16 20:14:40

标签: python dictionary

我是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'} }

3 个答案:

答案 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)))