繁体   English   中英

按第一个元素浮点数对包含字符串的元组列表进行排序(Python)

[英]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.

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