繁体   English   中英

为每个键值在字典中获取最大值的键

[英]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}]

如何获取给定entid最大值的字典?

预期结果:

[{'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
  1. 首先过滤'ent' 您可以使用集合理解{d['ent'] for d in list1}
  2. 然后将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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM