在字典列表中查找非公共变量的最小值,最大值和总和

时间:2017-05-02 00:50:24

标签: python dictionary

我在Python中有一个字典列表。

dict_list = [ {"k1" : "abc", "k2": "v2", "k3": "v3", "k4": 2},
              {"k1" : "v21", "k2": "v22", "k3": "v23", "k4": 5},
              {"k1" : "abc", "k2": "v2", "k3": "v3", "k4": 10} ]

我需要获得常用k1,k2,k3字段的“k4”键的最小值/最大值和总和。例如,对于上面的dict_list,输出应为:

[
 {"k1" : "abc", "k2": "v2", "k3": "v3", "min": 2, "max": 10, "sum": 12},
 {"k1" : "v21", "k2": "v22", "k3": "v23", "min": 5, "max": 5, "sum": 5}
]

我打算使用Counter容器来获取常用字段。

counter_out = Counter((d["k1"], d["k2"], d["k3"]) for d in dict_list)

然后我打算用counter_out迭代原来的dict_list。有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

不确定Counter将如何为您minmaxsum提供帮助。可能最简单的方法是创建一个以('k1', 'k2', 'k3')为键和值列表的中间字典。
然后相对简单地将其转换回您正在寻找的dict结构,例如:

In [1]:
from collections import defaultdict
t = defaultdict(list)
for d in dict_list:
    t[tuple(d[k] for k in ['k1', 'k2', 'k3'])].append(d['k4'])

[{'k1':k[0], 'k2':k[1], 'k3':k[2], 'min':min(v), 'max':max(v), 'sum':sum(v)} 
 for k, v in t.items()]

Out[1]:
[{'k1': 'abc', 'k2': 'v2', 'k3': 'v3', 'max': 10, 'min': 2, 'sum': 12},
 {'k1': 'v21', 'k2': 'v22', 'k3': 'v23', 'max': 5, 'min': 5, 'sum': 5}]