用不同的键汇总字典列表

时间:2019-11-09 18:43:54

标签: python-3.x dictionary

我有一个字典列表,具有不同的键和值,我想对值进行汇总,字典的结构如下:

结构:

for dic in doc_complete_views:
    for val in dic.values():
        print(val)  

产量:

{'Algorithmic_bias': 4462}
{'Algorithmic_bias': 2391}
{'Algorithmic_bias': None}
{'Algorithmic_bias': 3167}
{'Algorithmic_efficiency': 7172}
{'Algorithmic_efficiency': 6271}
{'Algorithmic_efficiency': 8612}
{'Algorithmic_efficiency': 8277}
{'Algorithmic_efficiency': 6467}
{'Algorithmic_efficiency': 7070}

预期输出:

{'Algorithmic_bias': 10020}
{'Algorithmic_efficiency': 43869}

使用的代码:

count={}
final_count = {}
for index in range(len(doc_complete_views)):
    for a,b in doc_complete_views[index].items():
        for i,j in b.items():
                try:
                    count[i] += j 
                except KeyError:
                    count[i] = j
    final_count[index] = count                  

# print the final array
print(final_count)

问题:

上述代码由于值无而失败

问题:

当我遍历字典列表(打印结构的地方)时,是否有一种方法可以对这些值求和而忽略None?

词典列表的结构:

defaultdict(<class 'dict'>, 
{datetime.datetime(2018, 11, 1, 0, 0): {'Algorithmic_bias': 3306}, 
datetime.datetime(2017, 7, 1, 0, 0): {'Algorithmic_bias': None}, 
datetime.datetime(2017, 5, 1, 0, 0): {'Algorithmic_bias': None}, 
datetime.datetime(2017, 11, 1, 0, 0): {'Algorithmic_bias': 1843}, 
datetime.datetime(2019, 7, 1, 0, 0): {'Algorithmic_bias': 3237}, 
datetime.datetime(2017, 2, 1, 0, 0): {'Algorithmic_bias': None}, 
datetime.datetime(2018, 8, 1, 0, 0): {'Algorithmic_bias': 2837}, 
datetime.datetime(2018, 3, 1, 0, 0): {'Algorithmic_bias': 1950}, 
datetime.datetime(2019, 2, 1, 0, 0): {'Algorithmic_bias': 3816},

1 个答案:

答案 0 :(得分:2)

具有collections.defaultdict和简单的if条件:

from collections import defaultdict

# doc_complete_views = ...
res = defaultdict(int)

for d in doc_complete_views:
    for sub_d in d.values():
        for k, v in sub_d.items():
            if v is not None:
                res[k] += v

final_lst = [{k:v} for k,v in res.items()]
print(final_lst)

输出:

[{'Algorithmic_bias': 10020}, {'Algorithmic_efficiency': 43869}]