gpt4 book ai didi

python - 有什么Pythonic方法可以清理这个字典列表吗?

转载 作者:行者123 更新时间:2023-12-01 00:49:28 25 4
gpt4 key购买 nike

您好,感谢您的帮助。我有一个字典列表,如下所示:

list_balls = [{'id': '803371', 'is_used': False, 'source': 'store', 'air': 0.9},
{'id': '803371', 'is_used': False, 'source': 'donation', 'air': 0.20},
{'id': '30042', 'is_used': False, 'source': 'donation', 'air': 0.75},
{'id': '803371', 'is_used': False, 'source': 'store', 'air': 1}]

我需要清理这个列表,留下唯一的字典列表。如果有两个或更多条目具有相同的 Id,我需要选择播出值(value)最高的一个。如果它们在 air 和 ids 上具有相同的值,我需要保留 source == 'store' 的值。因此,本例的结果将是

list_balls = [{'id': '30042', 'is_used': False, 'source': 'donation', 'air': 0.75},
{'id': '803371', 'is_used': False, 'source': 'store', 'air': 1}]

我尝试使用以下代码将需要删除的代码标记为 keep = False,但它仅在有两个重复项时才有效:

for i in range(0, len(list_balls )):
if len(list_balls ) > 1:
#print(list_balls [i])
for j in range(1, len(list_balls )):
if (list_balls [i]['id'] == list_balls [j]['id']):
if (list_balls [i]['air'] > list_balls [j]['air']):
list_balls [i]['keep'] = True
list_balls [j]['keep'] = False
print(list_pns)

我认为这个双 for 循环也不是最有效的方法,因此欢迎任何其他想法。感谢您的帮助

最佳答案

使用itertools.groupby

例如:

from itertools import groupby
list_balls = [{'source': 'store', 'air': 0.9, 'id': '803371', 'is_used': False}, {'source': 'donation', 'air': 0.2, 'id': '803371', 'is_used': False}, {'source': 'donation', 'air': 0.75, 'id': '30042', 'is_used': False}, {'source': 'store', 'air': 1, 'id': '803371', 'is_used': False}]


#result = [max(list(v), key=lambda x: x["air"]) for k, v in groupby(sorted(list_balls, key=lambda x: x["id"]), lambda x: x["id"])]
result = [max(list(v), key=lambda x: (x["air"], x["source"] == "store")) for k, v in groupby(sorted(list_balls, key=lambda x: x["id"]), lambda x: x["id"])]
print(result)

输出:

[{'air': 0.75, 'id': '30042', 'is_used': False, 'source': 'donation'},
{'air': 1, 'id': '803371', 'is_used': False, 'source': 'store'}]

关于python - 有什么Pythonic方法可以清理这个字典列表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56685852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com