如何按列表中的字母按字母顺序对项目中的项目进行排序。

时间:2016-09-15 16:27:01

标签: python

我正在尝试按名称中的字母对列表中的值进行排序:例如,我希望[“8a”,“8c”,“8b”,“8d”]成为[“8a”,“ 8b“,”8c“,”8d“]。这与密钥有关吗?

6 个答案:

答案 0 :(得分:3)

如果数据在您的问题中显示,答案很简单。如果数据更复杂,则必须为sort方法提供一个仅包含字母表中字符的键。

data =  ["34b", "2a5t", "2a5s", "abcd"]
data.sort(key=lambda x: ''.join(c for c in x if c.isalpha()))
print(data)

这将为您提供['abcd', '2a5s', '2a5t', '34b']

如果你想看看构造的键是怎么样的,你可以这样检查:

for value in data:
    print(value, ''.join(c for c in value if c.isalpha()))

34b b
2a5t at
2a5s as
abcd abcd

答案 1 :(得分:1)

假设您的格式始终是数字后跟字母,您需要为sort方法指定一个特定的键进行排序:在这种情况下,您希望按最后一个字符排序。很多其他答案只是按字母顺序使用数字后跟字母排序您的列表,而我感觉您只想按字母排序。这是一种可能的方式:

 s = ['9d', '12a', '1e']
 sorted_s = sorted(s, key=lambda x:x[-1])   # sorts by the last character of every entry

这将返回:

['12a', '9d', '1e']

答案 2 :(得分:0)

您可以通过列表对其进行排序来完成此操作。

list = ["8a", "8c", "8b", "8d"] 
list.sort()
print(list)

答案 3 :(得分:0)

这样可以解决您的问题:

_list = ["8a", "8c", "8b", "8d"] 
_list.sort()
print _list

输出:

['8a', '8b', '8c', '8d']

答案 4 :(得分:0)

提到了列表的.sort()方法;有一个排序函数,它将列表作为参数,并返回一个排序列表而不修改列表:

>>> mylist = ["8a", "8c", "8b", "8d"]
>>> sorted(list)
['8a', '8b', '8c', '8d']
>>> mylist
['8a', '8c', '8b', '8d']

答案 5 :(得分:0)

  

尝试按名称中的字母对列表中的值进行排序

你提到的例子非常简单。根据您的要求,以下是使用re.findall()sorted()根据字符串中任意顺序的字母进行排序的代码:

>>> import re
>>> s = ['a9d', '1a2ba', '1e2s', '1b3tr']
>>> sorted(s, key=lambda x: re.findall("[a-zA-Z]+", x))
['1a2ba', 'a9d', '1b3tr', '1e2s']  # Sorted based on: aba, ad, btr, es