在python中合并两个字典

2024-10-01 09:17:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两本字典:

a=

{
    "2001935072": {
        "WR": "48.9",
        "nickname": "rogs30541",
        "team": 2
    },
....
}

以及

b=

^{pr2}$

我试图将它们与a.update(b)和a={**a,**b}合并,但当我打印(a)时,两者都会给出以下输出:

^{pr2}$

基本上是a=b,如何合并a和b,所以输出是

{
    "2001935072": {
        "WR": "48.9",
        "nickname": "rogs30541",
        "team": 2
        "wtr": 816
    },
....
}

Tags: 字典nicknameupdatewrteampr2wtrrogs30541
3条回答

试试看这个:-

for i,j in a.items():
    for x,y in b.items():
        if i==x:
            j.update(y)

print(a) #your updateed output

你可以尝试列表+听写理解来达到你的效果:

>>> a = {"2001935072":{"WR":"48.9","nickname":"rogs30541","team":2}}
>>> b = {"2001935072":{"wtr":816}}
>>> l = dict([(k,a.get(k),b.get(k)) for k in set(list(a.keys()) + list(b.keys()))])

这将输出:

^{pr2}$

最终达到您期望的输出

>>> dict((k,{**va,**vb}) for k,va,vb in l)
>>> {'2001935072': {'WR': '48.9', 'nickname': 'rogs30541', 'team': 2, 'wtr': 816}}

我将计算键的并集,然后用一个helper方法将内部字典合并在一起重新构建字典(因为dict合并在3.6+内联中是可能的,但在此之前是不可能的)(How to merge two dictionaries in a single expression?

a={
    "2001935072": {
        "WR": "48.9",
        "nickname": "rogs30541",
        "team": 2
    }
    }
b= {
    "2001935072": {
        "wtr": 816
    },

}
def merge_two_dicts(x, y):
    """Given two dicts, merge them into a new dict as a shallow copy."""
    z = x.copy()
    z.update(y)
    return z

result = {k:merge_two_dicts(a.get(k,{}),b.get(k,{})) for k in set(a)|set(b)}

print(result)

结果:

^{pr2}$

注意事项:

  • a.get(k,{})允许获取k的值,默认值为so merge仍然有效,只保留bdict中的值
  • merge_two_dicts只是一个助手函数。不能直接与abdicts一起使用,否则会产生错误的结果,因为最后合并的一个“wins”并覆盖其他dict值

使用Python 3.6+:您可以在不使用任何helper函数的情况下执行此操作:

result = {k:{**a.get(k,{}),**b.get(k,{})} for k in set(a)|set(b)}

相关问题 更多 >