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