获取字典列表的最大值索引
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'])
这将 return 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
函数的 return 值所在的元素最高。
使用单独的列表提取所有 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}
我正在尝试获取字典列表中最大 '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'])
这将 return 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
函数的 return 值所在的元素最高。
使用单独的列表提取所有 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}