我正在处理带有字母数字键的字典,我需要对它们进行排序。
所需的顺序是
a1 : 3
a2 : 2
b1 : 2
b2 : 3
c1 : 5
a1 b2 : 3
a2 b1 : 2
a1 c1 : 3
a2 c1 : 2
b1 c1 : 2
b2 c1 : 3
a1 b2 c1 : 3
a2 b1 c1 : 2
但是,到目前为止,我得到的是
for key in sorted(s1.keys(),key = lambda item: (len(item),item,)):
print("%s: %s" % (key, s1[key]))
a1: 3
a2: 2
b1: 2
b2: 3
c1: 5
a1 b2: 3
a1 c1: 3
a2 b1: 2
a2 c1: 2
b1 c1: 2
b2 c1: 3
a1 b2 c1: 3
a2 b1 c1: 2
事情是我想按A-> B-> C-> AB-> AC-> BC-> ABC的顺序,然后根据数字值对每个小组进行排序,例如,对于AB,如果我拥有a1b1,a2b1,a1b2,a2b2,则顺序将为a1b1,a1b2,a2b1,a2b2。
最佳答案
作为key
功能,您可以split
和zip
键:
>>> s = 'a1 b2 c1'
>>> list(zip(*s.split()))
[('a', 'b', 'c'), ('1', '2', '1')]
要在
b
之前对a b
进行排序,还必须考虑段数。对于您的
s1
数据:>>> sorted(s1, key=lambda s: (s.count(' '), list(zip(*s.split()))))
['a1',
'a2',
'b1',
'b2',
'c1',
'a1 b2',
'a2 b1',
'a1 c1',
'a2 c1',
'b1 c1',
'b2 c1',
'a1 b2 c1',
'a2 b1 c1']
如果每个块中可以包含多个字母或数字,则可以使用
re.findall
代替:>>> s = "aa12 bb34 cc56"
>>> re.findall("[a-z]+", s), re.findall("\d+", s)
(['aa', 'bb', 'cc'], ['12', '34', '56'])
关于python - 如何在python中按字母顺序对字母数字字符串进行排序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42715999/