[英]Sort List of Tuples Containing Strings By First Element Float (Python)
我有很长的元组列表:
[...
(0.862, 'beehive', 'bug'),
(0.12, 'yard', 'property'),
(0.0, 'lake', 'mailbox'),
(0.37, 'maintenance', 'shears'),
(0.1666, 'summer', 'popsicle'),
(0.9, 'poplar', 'tree')
...]
并且我需要将此列表按float值降序排序。 我知道Python会自动根据第一个值对列表进行排序,但是即使我调用sorted或显式指定第一个元素,我也没有成功。
sorted(mylist) # doesn't sort the list at all
sorted(mylist, key = x[0]) # on this sort attempt I get "'str' object is not callable"
任何人都无法提供详细信息,说明尽管进行了这些排序尝试,但为什么列表仍然杂乱无章,并且可能由浮点数按降序排序?
sorted(..)
返回一个新列表。 你所寻找的是.sort(..)
对列表进行排序就地 。
此外,您可以使用reverse
参数以降序排序:
data.sort(reverse=True) # sort the list inplace
这将返回:
>>> data.sort(reverse=True)
>>> data
[(0.9, 'poplar', 'tree'), (0.862, 'beehive', 'bug'), (0.37, 'maintenance', 'shears'), (0.1666, 'summer', 'popsicle'), (0.12, 'yard', 'property'), (0.0, 'lake', 'mailbox')]
默认的元组排序将首先对第一个元素进行排序 。 如果这些相等,则将考虑每个元组的第二个元素,依此类推。
如果您不希望使用这种平局决胜局,但在这种情况下使用原始订单,则可以使用itemgetter
作为key
:
from operator import itemgetter
data.sort(reverse=True,key=itemgetter(0)) # sort the list inplace
如果要构造一个新的已排序列表,可以将相同的参数与sorted(..)
一起使用:
data_sorted = sorted(data,reverse=True) # construct a new sorted list
尝试这种方式:
data = [
(0.862, 'beehive', 'bug'),
(0.12, 'yard', 'property'),
(0.0, 'lake', 'mailbox'),
(0.37, 'maintenance', 'shears'),
(0.1666, 'summer', 'popsicle'),
(0.9, 'poplar', 'tree')
]
print(*reversed(sorted(data)))
输出:
(0.9, 'poplar', 'tree') (0.862, 'beehive', 'bug') (0.37, 'maintenance', 'shears') (0.1666, 'summer', 'popsicle') (0.12, 'yard', 'property') (0.0, 'lake', 'mailbox')
或者,您可以执行另一个过程:
>>> data = [
... (0.862, 'beehive', 'bug'),
... (0.12, 'yard', 'property'),
... (0.0, 'lake', 'mailbox'),
... (0.37, 'maintenance', 'shears'),
... (0.1666, 'summer', 'popsicle'),
... (0.9, 'poplar', 'tree')
... ]
>>> data.sort(key=lambda tup: tup[0], reverse = True)
>>> data
[(0.9, 'poplar', 'tree'), (0.862, 'beehive', 'bug'), (0.37, 'maintenance', 'shears'), (0.1666, 'summer', 'popsicle'), (0.12, 'yard', 'property'), (0.0, 'lake', 'mailbox')]
>>>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.