从类似的列表中:
mylist = [{'x':2020 , 'y':20},{'x':2020 , 'y':30},{'x':2021 , 'y':10},{'x':2021 , 'y':5}]
我想让所有“ x”保持唯一,而“ y”保持最大,其中“ x”相同。
我试图得到的输出为:
mylist_unique = [{'x':2020 , 'y':30},{'x':2021 , 'y':10}]
我已经以非常幼稚的方式实现了它:
res =[]
temp = {}
print(len(temp))
for i in range(len(mylist)):
print(mylist[i])
for k,v in mylist[i].items():
print(mylist[i]['x'],temp.keys(),mylist[i]['y'])
if mylist[i]['x'] not in temp.keys() or mylist[i]['y'] > (temp[mylist[i]['x']]) :
print(k)
temp.update({mylist[i]['x']:mylist[i]['y']})
print(temp)
for k,v in temp.items():
res.append({'x':k,'y':v})
print(res)
您可以使用dict理解itertools.groupby
:
from itertools import groupby
mylist = [{'x': 2020, 'y': 20}, {'x': 2020, 'y': 30}, {'x': 2021, 'y': 10}, {'x': 2021, 'y': 5}]
mylist_unique = [{'x': key, 'y': max(item['y'] for item in values)}
for key, values in groupby(mylist, lambda dct: dct['x'])]
print(mylist_unique)
这产生
[{'x': 2020, 'y': 30}, {'x': 2021, 'y': 10}]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句