【发布时间】:2014-01-21 12:10:34
【问题描述】:
给定这样的列表:
[["fileA",7],["fileB",4],["fileC",17],["fileD",15]]
如何返回与最小值关联的第一个元素?在本例中,“fileB”具有最小值 (4)。我猜最短的方法是使用列表理解。
【问题讨论】:
标签: python
给定这样的列表:
[["fileA",7],["fileB",4],["fileC",17],["fileD",15]]
如何返回与最小值关联的第一个元素?在本例中,“fileB”具有最小值 (4)。我猜最短的方法是使用列表理解。
【问题讨论】:
标签: python
实际上,列表推导式并不是最好的工具。相反,您应该使用min、它的key function 和operator.itemgetter:
>>> from operator import itemgetter
>>> lst = [["fileA",7],["fileB",4],["fileC",17],["fileD",15]]
>>> min(lst, key=itemgetter(1))
['fileB', 4]
>>> min(lst, key=itemgetter(1))[0]
'fileB'
>>>
【讨论】:
无需导入任何内容即可:
min(lst, key = lambda x: x[1])[0]
【讨论】:
我想出了这个奇怪的想法,它只使用简单的生成器表达式:
min((x[1], x[0]) for x in lst)[1]
这是基于默认情况下对元组/列表的第一个元素进行最小化的事实。
【讨论】:
您可能应该只是将数据转换为字典,因为这似乎比拥有列表列表更明智。然后,您可以更轻松地操作和访问您的数据。
myLists = [["fileA",7],["fileB",4],["fileC",17],["fileD",15]]
myDict = dict(myLists)
min(myDict, key=myDict.get)
# 'fileB'
【讨论】:
myDict = dict(myLists) :)