Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python的嵌套字典中追加列表_Python_Python 3.x_Dictionary_Nested_Python 3.5 - Fatal编程技术网

如何在Python的嵌套字典中追加列表

如何在Python的嵌套字典中追加列表,python,python-3.x,dictionary,nested,python-3.5,Python,Python 3.x,Dictionary,Nested,Python 3.5,我有两个嵌套字典: grouped1 ={'LabelStat': { 'Carrier': ['1', '1'], 'FormID': ['0201', '0430']}, 'McAfee': {'DatDate': 'Not Available', ' DatVersion': 'Not Available'} }

我有两个嵌套字典:

 grouped1 ={'LabelStat': { 'Carrier': ['1', '1'],
                           'FormID': ['0201', '0430']},
          
             'McAfee': {'DatDate': 'Not Available',
            '            DatVersion': 'Not Available'}
           }
    
    
 grouped2 ={'LabelStat': {'Carrier': ['2', '2'],
                          'FormID': ['10201', '10430']},
         'McAfee': {'DatDate': 'Available',
            'DatVersion': 'Available',}
           }
我想附加这两个字典,输出应该如下所示:

com_grouped = {
    'LabelStat': {'Carrier': ['1', '1','2','2'],
                   'FormID': ['0201', '0430','10201', '10430']}
             
    'McAfee': {'DatDate': ['Not Available','Available']
               'DatVersion': ['Not Available','Available']}
    
             }
第一次尝试:

com_grouped = grouped1.update(grouped2)
print(com_grouped)
而输出是没有的

然后我累了:

com_grouped = grouped1
com_grouped=com_grouped.update(grouped2)
print(com_grouped)

输出仍然没有

您可以对集合使用递归。defaultdict:

from collections import defaultdict
import re
def merge(*d):
   v = defaultdict(list)
   for i in d:
      for a, b in i.items():
         v[re.sub('^\s+', '', a)].append(b)
   return {a:merge(*b) if all(isinstance(j, dict) for j in b) 
            else [i for j in b for i in (j if isinstance(j, list) else [j])] 
              for a, b in v.items()}

print(merge(grouped1, grouped2))
输出:

{'LabelStat': {'Carrier': ['1', '1', '2', '2'], 'FormID': ['0201', '0430', '10201', '10430']}, 'McAfee': {'DatDate': ['Not Available', 'Available'], 'DatVersion': ['Not Available', 'Available']}}
{'LabelStat': {'Carrier': ['2', '2'], 'FormID': ['10201', '10430']}, 'McAfee': {'DatDate': 'Available', 'DatVersion': 'Available'}}

您可以使用
update()
方法合并2个dict:

grouped1 = {'LabelStat': {'Carrier': ['1', '1'],
                          'FormID': ['0201', '0430']},

            'McAfee': {'DatDate': 'Not Available',
                       '            DatVersion': 'Not Available'}
            }

grouped2 = {'LabelStat': {'Carrier': ['2', '2'],
                          'FormID': ['10201', '10430']},
            'McAfee': {'DatDate': 'Available',
                       'DatVersion': 'Available', }
            }
com_grouped = grouped1
com_grouped.update(grouped2)
输出:

{'LabelStat': {'Carrier': ['1', '1', '2', '2'], 'FormID': ['0201', '0430', '10201', '10430']}, 'McAfee': {'DatDate': ['Not Available', 'Available'], 'DatVersion': ['Not Available', 'Available']}}
{'LabelStat': {'Carrier': ['2', '2'], 'FormID': ['10201', '10430']}, 'McAfee': {'DatDate': 'Available', 'DatVersion': 'Available'}}
输出:
{“a”:[1,2]}

使用嵌套循环。StackOverflow不是免费编码服务。你应该会的。请更新您的问题,以显示您已在某个应用程序中尝试过的内容。欲了解更多信息,请参阅,并采取:)是的,先生,我同意你的意见,并将更新,谢谢你的提醒!Hi@Barmar,我刚刚编辑了我的问题,请给我一些建议,非常感谢!非常感谢你!它起作用了!您好,先生,谢谢您的回复,但是当我运行它时,DatVersion的输出是这样的:DatVersion':['Not Available'],'DatVersion':['Available']}不能组合在一起,您能帮我检查一下吗?非常感谢@William,这是因为在
grouped1
中的
DatVersion
前面有额外的空格:
'DatVersion'
。您可以调整原始输入,也可以使用“我的编辑版本”,该版本会从键中删除前导空格是的,它可以工作!我真的很感谢你的帮助和知识!嘿@Ajax1234,您是否介意添加一个更为新手友好的解决方案版本,而不使用复杂的列表和dict理解?我相信如果它更易读一点,人们会更好地理解它。谢谢你的回复,如果我有10个DICT需要更新怎么办?正如我所知,你可以使用循环操作。或者使用此代码(如果您拥有所有dict的名称):
merged={**dict1、**dict2、**dict3、**dict4、**dict5、**dict6、**dict7、**dict8、**dict9、**dict10}