Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.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_Dictionary_Merge - Fatal编程技术网

如何合并两个与python中的词典一起使用的词典?

如何合并两个与python中的词典一起使用的词典?,python,dictionary,merge,Python,Dictionary,Merge,下面是一个类似输入的巨大文件中的示例输入 { "V-Su7890": [ [ { "url": "www.talent.com", "tid": "V-Su7890", "id": "58ff787ffbad487b2c", "company_name": "Talent Ltd" }

下面是一个类似输入的巨大文件中的示例输入

{
    "V-Su7890": [
        [
            {
                "url": "www.talent.com",
                "tid": "V-Su7890",
                "id": "58ff787ffbad487b2c",
                "company_name": "Talent Ltd"
            }
        ],
        [
            {
                "socials": ["facebook", "linkedin", "twitter"],
                "title": "title of the pag",
                "contact": ["+9563802140"],
                "email": "email_id1"
            },
            {
                "socials": ["facebook", "twitter", "linkedin"],
                "title": "next title of the page",
                "contact": ["+919765983442"],
                "email": "email_id2"
            }
        ]
    ]
}
我必须将当前字典第二个列表的所有子字典合并到一个没有重复值的字典中,然后将字典作为值存储到键“V-Su7890”中

所需输出为:

{
    "V-Su7890": [
        [
            {
                "url": "www.talent.com",
                "tid": "V-Su7890",
                "id": "58ff787ffbad487b2c",
                "company_name": "Talent Ltd"
            }
        ],
        [
            {
                "socials": ["facebook", "linkedin", "twitter"],
                "title": ["title of the pag", "next title of the page"],
                "contact": ["+9563802140", "+919765983442"],
                "email": ["email_id","email_id2"]
            }
        ]
    ]
}

请帮助我理解并解决这个问题

假设您将完整的
dict
存储在变量V中。我们将
社交
标题
等的值存储在一个集合中,以避免重复值。稍后,我们将把集合转换为列表。以下是解决方案:

V = k["V-Su7890"][1]
new_dict = {}

for v in V:
    for key, value in v.iteritems():
        if not new_dict.get(key, None):
            new_dict[key] = set()

        if isinstance(value, list):
            for val in value:
                new_dict[key].add(val)
        else:
            new_dict[key].add(value)

# Converting the sets to list
for key, value in new_dict.iteritems():
    new_dict[key] = list(value)

k["V-Su7890"][1] = [new_dict]

您可以使用
setdefault()
插入具有默认值的键(这里您可以使用空列表),如果新项不存在,则可以使用
扩展列表

for k,v in a.items():
    tmp={}
    for i in v[1]:
        for k1,v2 in i.items():
            if isinstance(v2,list):
                tmp.setdefault(k1,[]).extend(i for i in v2 if i not in tmp[k1])
            else:
                tmp.setdefault(k1,[]).append(v2)
    a[k]=[v[0],[tmp]]
print(a)
结果:

{
  'V-Su7890': [
    ...
    [
      {
        'contact': ['+9563802140','+919765983442'],
        'socials': ['facebook','linkedin','twitter'],
        'email': ['email_id1','email_id2'],
        'title': ['title of the pag','next title of the page']
      }
    ]
  ]
}

到目前为止,您尝试了什么?遇到了什么问题?对不起,我有一个疑问。什么是V=k[“V-Su7890”][1]?您提到“将完整的dict存储在变量V中”,但该文件仅包含字典列表,正如我在上面所采样的那样。您将原始的dict列表包含在花括号中,它本身就是一个dict.{“V-Su7890”:[…]}谢谢,但这也将下一条记录合并到以前的字典中。例如,{“V-Su7890”:[………],“V-SZ86385ZM”:[………]},并且“email”中的值包含重复项。@Niveram我编辑我的答案,将
tmp={}
放在For循环中,它不会合并下一条记录。太好了。。谢谢McGrady。嗨,McGrady,我的输入是{u'V-WW62364WT':[[[{………},[……],u'V-YS87486IT':它的值,u'V-SZ86385ZM':它的值}有可能在键处拆分,这样上面的代码就可以完美地工作。