[英]Getting key with maximum value in dictionary for each Key value
我有一个字典,其中键是字符串,值是整数。
list1 = [{'id': 1, 'ent': 123}, {'id': 2, 'ent': 123}, {'id': 3, 'ent': 456}, {'id': 4, 'ent': 456}, {'id': 5, 'ent': 123}]
如何获取给定ent
的id
最大值的字典?
预期结果:
[{'id': 4, 'ent': 456},{'id': 5, 'ent': 123}]
代码:
[{'id': max(list(filter(None,[v['id'] if v['ent'] == i else None for v in list1]))), 'ent':i} for i in set([i['ent'] for i in list1])]
Output:
[{'id': 4, 'ent': 456}, {'id': 5, 'ent': 123}]
res = {}
for item in list1:
id, ent = item['id'], item['ent']
try:
if id > res[ent]:
res[ent] = id
except KeyError:
res[ent] = id
'ent'
。 您可以使用集合理解{d['ent'] for d in list1}
max
与键 function 一起使用,以找到具有max([d for d in list1 if d['ent']==e], key=lambda d: d['id'])
的过滤列表的最大值所以:
for e in {d['ent'] for d in list1}:
print(max([d for d in list1 if d['ent']==e], key=lambda d: d['id']))
印刷:
{'id': 4, 'ent': 456}
{'id': 5, 'ent': 123}
这可以是一个列表理解:
[max([d for d in list1 if d['ent']==e], key=lambda d: d['id'])
for e in {d['ent'] for d in list1}]
结果:
[{'id': 4, 'ent': 456}, {'id': 5, 'ent': 123}]
您还可以使用排序方法,根据排序结果对列表进行唯一化:
list({d['ent']:d
for d in sorted(list1, key=lambda d: (d['id'], d['ent']))}.values())
对于大型列表,这可能会更快,因为它的复杂度为O(n log n)
),而其他方法的复杂度为O(n * n)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.