Python数据结构按字母顺序排序列表


159

我对python中的数据结构有些困惑;()[]{}。我正在尝试对一个简单的列表进行排序,可能是因为无法识别未能排序的数据类型。

我的清单很简单: ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue']

我的问题是这是什么类型的数据,以及如何按字母顺序对单词进行排序?


如果要对列表进行排序,则可以使用“ list = ['Stem','constitute','Sedge','Eflux','Whim','Intrigue'] list.sort()打印列表”。
kannanrbk 2012年

[]封装了内置数据类型list(请参阅tutorialspoint.com/python/python_lists.htm)。列表只是一组值(它们可以包含其他可迭代对象,即嵌套列表)。()封闭了buildin tuple。它们是不可变的(无法更改)。(请参阅tutorialspoint.com/python/python_tuples.htm)。并{}封闭内置对象dictionary。与字典(用于单词)平行,其中“键”为单词,“值”为定义。(请参阅tutorialspoint.com/python/python_dictionary.htm)。
Rushy Panchal 2012年

Answers:


231

[]表示列表()表示元组{}表示字典。您应该看一下官方的Python教程,因为这些是Python编程的基础知识。

您所拥有的是一个字符串列表。您可以像这样对它进行排序:

In [1]: lst = ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue']

In [2]: sorted(lst)
Out[2]: ['Eflux', 'Intrigue', 'Sedge', 'Stem', 'Whim', 'constitute']

如您所见,以大写字母开头的单词优先于以小写字母开头的单词。如果要独立对它们进行排序,请执行以下操作:

In [4]: sorted(lst, key=str.lower)
Out[4]: ['constitute', 'Eflux', 'Intrigue', 'Sedge', 'Stem', 'Whim']

您还可以按以下相反顺序对列表进行排序:

In [12]: sorted(lst, reverse=True)
Out[12]: ['constitute', 'Whim', 'Stem', 'Sedge', 'Intrigue', 'Eflux']

In [13]: sorted(lst, key=str.lower, reverse=True)
Out[13]: ['Whim', 'Stem', 'Sedge', 'Intrigue', 'Eflux', 'constitute']

请注意:如果您使用的是Python 3,那么str对于每个包含人类可读文本的字符串来说,数据类型都是正确的。但是,如果仍然需要使用Python 2,则可以处理Unicode字符串,其数据类型unicode为Python 2,而不是str。在这种情况下,如果您有一个unicode字符串列表,则必须编写key=unicode.lower而不是key=str.lower


find_one()MongoDB数据库的pymongo 结果上使用第二个示例,出现错误: descriptor 'lower' requires a 'str' object but received a 'unicode'。其结果是一个字符串数组,并这样来实现: results['keywords'] = sorted(keywords['keywords'], key=str.lower)。有人知道如何解决这个问题吗?
user1063287 '16

@ user1063287对不起,我的回复很晚。在您的情况下,您需要编写key=unicode.lower而不是key=str.lower。这是因为您正在处理unicode字符串,而不是字节字符串。请参阅官方的Unicode HOWTO以获得有关此内容的更多信息,尤其是有关Python 2和3之间的分别差异
。– pemistahl

32

Python有一个称为的内置函数sorted,它将为您提供的任何可迭代项(例如list([1,2,3]); dict({1:2,3:4},尽管它只会返回键的排序列表; set({1,2,3,4)))提供排序列表。;或元组((1,2,3,4)))。

>>> x = [3,2,1]
>>> sorted(x)
[1, 2, 3]
>>> x
[3, 2, 1]

列表还具有一种sort将就地执行排序的方法(x.sort()返回None,但更改x对象)。

>>> x = [3,2,1]
>>> x.sort()
>>> x
[1, 2, 3]

两者都带有一个key参数,该参数应该是可调用的(函数/ lambda),可用于更改排序依据。
例如,(key,value)要从按值排序的字典中获取-pairs 列表,可以使用以下代码:

>>> x = {3:2,2:1,1:5}
>>> sorted(x.items(), key=lambda kv: kv[1])  # Items returns a list of `(key,value)`-pairs
[(2, 1), (3, 2), (1, 5)]

12

您正在处理python列表,对它进行排序就很容易。

my_list = ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue']
my_list.sort()


4

ListName.sort()将按字母顺序排序。您可以reverse=False/True在方括号中添加以反转项目顺序:ListName.sort(reverse=False)


1
这是对Ruby的评论吗?
allanberry

3
>>> a = ()
>>> type(a)
<type 'tuple'>
>>> a = []
>>> type(a)
<type 'list'>
>>> a = {}
>>> type(a)
<type 'dict'>
>>> a =  ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue'] 
>>> a.sort()
>>> a
['Eflux', 'Intrigue', 'Sedge', 'Stem', 'Whim', 'constitute']
>>> 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.