python合并多个dict---合并多个字典值---字典值相加

文章目录

  • 多个dict同key值相加
    • collection.Counter
    • 传参
    • 重载+号
  • 多个dict合并
  • 练习

主要是借助Counter、函数传参和+运算符重载!各有优劣!

多个dict同key值相加

collection.Counter

借助collections.Counter,但是它只适用于值为整数或者小数类型**,否则报错!**

from collections import Counter
a = {"1":2}
b = {"1":30}
print(dict(Counter(a)+Counter(b)))

a = {"1":2.0}
b = {"1":30.5}
print(dict(Counter(a)+Counter(b)))

python合并多个dict---合并多个字典值---字典值相加_第1张图片

传参

借助函数传参,但是不能同key相加。如下:

a = {"1":2}
b = {"2":3}

def merge_dicts(**kwargs):
    return kwargs

merge_dicts(**a, **b)

python合并多个dict---合并多个字典值---字典值相加_第2张图片

重载+号

写代码多。

from collections.abc import Iterable

class MyDict:
    def __init__(self, dic):
        self._dic = dic
    
    def __add__(self, other):
        new_dic = self._dic
        for k, v in other._dic.items():
            if k in new_dic:
                if isinstance(v, Iterable) or isinstance(v, int) or isinstance(v, float):
                    new_dic[k] += v
            else:
                new_dic[k] = v
        self._dic = new_dic
        return self._dic
    
a = MyDict({1: "11a"})
b = MyDict({10: 21, 1: "11b"})
a+b

python合并多个dict---合并多个字典值---字典值相加_第3张图片

多个dict合并

两种方法

# 方法一, 借助函数传参
a = {"1":2}
b = {"2":3}

def update(**kwargs):
    return kwargs

update(**a, **b)

输出如下:
python合并多个dict---合并多个字典值---字典值相加_第4张图片

# 方法二
from collections import Counter
a = {"1":2}
b = {"2":3}
dict(Counter(a)+Counter(b))

python合并多个dict---合并多个字典值---字典值相加_第5张图片

练习

请您对以上三种方法的弊端进行复现。

你可能感兴趣的:(python,开发语言)