从python中的字典列表中获取最大值字典

时间:2021-03-09 08:45:56

标签: python dictionary

我有这个清单。

dict_list = [{"rp":1,"vi":100},{"rp":2,"vi":70},{"rp":1,"vi":200},{"rp":1,"vi":150},{"rp":2,"vi":300},{"rp":3, "vi":120 }]

我希望输出为:

[ {"rp":1,"vi":200},{"rp":2,"vi":300},{"rp":3,"vi":120}]

有人可以帮忙吗??

3 个答案:

答案 0 :(得分:2)

您可以使用 'rp' 值作为键构建一个临时字典,并按 'vi' 值的顺序提供数据,以便为每个唯一的 'rp' 键保留最高的 'vi' 值。然后将该临时字典的值转换为字典列表:

R = [*{d["rp"]:d for d in sorted(dict_list,key=lambda d:d["vi"])}.values()]

print(R)

[{'rp': 2, 'vi': 300}, {'rp': 1, 'vi': 200}, {'rp': 3, 'vi': 120}]

答案 1 :(得分:1)

一种解决方案可能是创建一个字典,其中键为 rp 值,值为最大 vi 值。

使用创建的字典创建需要的列表

dict_list = [{"rp":1,"vi":100},{"rp":2,"vi":70},{"rp":1,"vi":200},{"rp":1,"vi":150},{"rp":2,"vi":300},{"rp":3, "vi":120 }]
res = dict()
for elt in dict_list:
    res[elt["rp"]] = max(res.get(elt["rp"], 0), elt["vi"]) # overwrite with max for matching keys

dict_list = [{"rp": key, "vi": value}  for key, value in res.items()]
print(dict_list)

答案 2 :(得分:0)

我不确定这是否是最优雅的方式,但我希望它有所帮助。

你可以尝试使用熊猫来做这样的事情:

import pandas as pd

dict_list = [{"rp":1,"vi":100},{"rp":2,"vi":70},{"rp":1,"vi":200}, 
{"rp":1,"vi":150},{"rp":2,"vi":300},{"rp":3, "vi":120 }]
full = pd.DataFrame(dict_list)

rp_list = pd.Series(full['rp']).unique()
new= []

for rp in rp_list:
    values = full.loc[full['rp'] == rp]
    max_value = values["vi"].max()
    new.append({'rp':rp,'vi':max_value})
print (new)