Python 合并 dict

邱秋 • 2019年08月22日 • 阅读:170 • python

Python 两个或多个字典(dict)合并(取字典并集)

1、 Python 3.9.0 或更高版本使用|

x = {'C': 11, 'Java': 22}
y = {'Python': 33, 'CJavaPy': 44}
z = x | y
print(z)
注意:TypeError: unsupported operand type(s) for |: 'dict' and 'dict' 这个错误原因是Python是Python 3.9.0之前版本,不支持这个语法。

2、Python 3.5 或更高版本使用**

x = {'C': 11, 'Java': 22}
y = {'Python': 33, 'CJavaPy': 44}
z = {**x, **y}
print(z)

# or
z = dict( x.items() + y.items() )
print(z)

# or
z = dict( x, **y )
print(z)

3、Python 2或 3.4及更低版本使用自定函数

def merge_two_dicts(x, y):
    z = x.copy()   
    z.update(y)    
    return z
x = {'C': 11, 'Java': 22}
y = {'Python': 33, 'CJavaPy': 44}
print(merge_two_dicts(x , y))

4、合并多个字典(dict)

def merge_dicts(*dict_args):
    result = {}
    for dictionary in dict_args:
        result.update(dictionary)
    return result
x = {'C': 11, 'Java': 22}
y = {'Python': 33, 'CJavaPy': 44}
z ={'www.cjavapy.com':55,'Linux':66}
print(merge_dicts(x , y, z))

5、性能测试

from timeit import repeat
from itertools import chain
x = dict.fromkeys('https://www.chuchur.com')
y = dict.fromkeys('javascript')
def merge_dicts(*dict_args):
    result = {}
    for dictionary in dict_args:
        result.update(dictionary)
    return result
print(min(repeat(lambda: {**x, **y},number=1)))
print(min(repeat(lambda: merge_dicts(x, y),number=1)))
#min(repeat(lambda: x | y)) #python 3.9.0及以上版本
print(min(repeat(lambda: {k: v for d in (x, y) for k, v in d.items()},number=1)))
print(min(repeat(lambda: dict(chain(x.items(), y.items())),number=1)))
print(min(repeat(lambda: dict(item for d in (x, y) for item in d.items()),number=1)))

我,秦始皇,打钱!