我有一个字典列表,具有不同的键和值,我想对值进行汇总,字典的结构如下:
结构:
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},
答案 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}]