Python的dicts列表,获取最大值索引

Kva*_*ash 12 python dictionary max

我试图在字典'size'列表中获取字典索引,如下所示:

ld = [{'prop': 'foo', 'size': 100}, {'prop': 'boo', 'size': 200}]
Run Code Online (Sandbox Code Playgroud)

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

items = [x['size'] for x in ld]
print(max(items))
Run Code Online (Sandbox Code Playgroud)

我现在该如何获取其索引?有一个简单的方法吗?

测试:

我想我能做到这一点:

items = [x['size'] for x in ld]
max_val = max(items)
print(items.index(max_val))
Run Code Online (Sandbox Code Playgroud)

它是否正确?

Mar*_*ers 18

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

max(range(len(ld)), key=lambda index: ld[index]['size'])
Run Code Online (Sandbox Code Playgroud)

这将返回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'}
Run Code Online (Sandbox Code Playgroud)

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

max(ld, key=lambda d: d['size'])
Run Code Online (Sandbox Code Playgroud)

并获得索引字典,你可以enumerate()在这里使用:

max(enumerate(ld), key=lambda item: item[1]['size'])
Run Code Online (Sandbox Code Playgroud)

一些演示:

>>> 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'})
Run Code Online (Sandbox Code Playgroud)

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

使用单独的列表提取所有size值然后将其映射回原始列表不是非常有效(您现在需要迭代列表两次).list.index()无法工作,因为它必须匹配整个字典,而不仅仅是一个值.


Kas*_*mvd 5

您可以使用正确的键传递enumerate(ld)tomax函数:

>>> max(enumerate(ld),key=lambda arg:arg[1]['size'])[0]
1
Run Code Online (Sandbox Code Playgroud)

如果您只想要具有最大值的字典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}
Run Code Online (Sandbox Code Playgroud)