繁体   English   中英

获取字典列表的最大值索引

[英]Get max value index for a list of dicts

我正在尝试在字典列表中获取具有最大'size'的字典索引,如下所示:

ld = [{'prop': 'foo', 'size': 100}, {'prop': 'boo', 'size': 200}]

使用以下代码,我可以采用最大尺寸:

items = [x['size'] for x in ld]
print(max(items))

我现在如何获取它的索引? 有没有简单的方法?

测试:

我只是想我可以这样做:

items = [x['size'] for x in ld]
max_val = max(items)
print(items.index(max_val))

这样对吗?

告诉max()如何计算索引序列的最大值:

max(range(len(ld)), key=lambda index: ld[index]['size'])

这将返回size键最高的索引:

>>> ld = [{'prop': 'foo', 'size': 100}, {'prop': 'boo', 'size': 200}]
>>> max(range(len(ld)), key=lambda index: ld[index]['size'])
1
>>> ld[1]
{'size': 200, 'prop': 'boo'}

如果你一直想要那本字典,那么你可以使用:

max(ld, key=lambda d: d['size'])

并获取索引字典,您可以在此处使用enumerate()

max(enumerate(ld), key=lambda item: item[1]['size'])

更多演示:

>>> max(ld, key=lambda d: d['size'])
{'size': 200, 'prop': 'boo'}
>>> max(enumerate(ld), key=lambda item: item[1]['size'])
(1, {'size': 200, 'prop': 'boo'})

key函数依次传递输入序列中的每个元素, max()将选择该key函数返回值最高的元素。

使用单独的列表来提取所有size值,然后将其映射回原始列表的效率不是很高(您现在需要遍历列表两次)。 list.index()不能工作,因为它必须匹配整个字典,而不仅仅是其中的一个值。

您可以使用适当的键将enumerate(ld)传递给max函数:

>>> max(enumerate(ld),key=lambda arg:arg[1]['size'])[0]
1

如果您只想要具有最大size值的字典,作为 Pythonic 方法,您可以使用operator.itemgetter函数作为键:

In [10]: from operator import itemgetter 

In [11]: ld = [{'prop': 'foo', 'size': 100}, {'prop': 'boo', 'size': 200}]

In [12]: fn = itemgetter('size')

In [13]: max(ld, key=fn)
Out[13]: {'prop': 'boo', 'size': 200}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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