光环, 要按值对dict列表排序:
a = [{'cavity' : '11A', 'ltg_nr' : 'Ltgnr11A'},
{'cavity' : '20', 'ltg_nr' : 'Ltgnr20'},
{'cavity' : '10', 'ltg_nr' : 'Ltgnr10'},
{'cavity' : '17B', 'ltg_nr' : 'Ltgnr17B'},
{'cavity' : '1K', 'ltg_nr' : 'Ltgnr1K'},
{'cavity' : '11A', 'ltg_nr' : 'Ltgnr11A'},
{'cavity' : '11A', 'ltg_nr' : 'Ltgnr11A'},
{'cavity' : '22', 'ltg_nr' : 'Ltgnr22'},
{'cavity' : '21A', 'ltg_nr' : 'Ltgnr21A'},
{'cavity' : '21C', 'ltg_nr' : 'Ltgnr21C'},
{'cavity' : '21B', 'ltg_nr' : 'Ltgnr170'},
{'cavity' : '101', 'ltg_nr' : 'Ltgnr170'},
{'cavity' : '22AA', 'ltg_nr' : 'Ltgnr170'},
{'cavity' : '100A', 'ltg_nr' : 'Ltgnr170'}]
newList= sorted(a, key=lambda k: (len(k['cavity']),k['cavity']) )
print "-"*20 + ' sorted ' + "-"*20
for k in newList:
print k['cavity']
结果并不是我所期望的:
C:\Python27>python.exe test_dict.py
-------------------- sorted --------------------
10
1K
20
22
101
11A
11A
11A
17B
21A
21B
21C
100A
22AA
我将首先按数字排序,然后按字母字符排序。我该怎么做:
1K
10
11A
11A
11A
17B
20
21A
21B
21C
22
22AA
100A
101
欢迎所有建议:) 桑克斯 皮奥特
您的方法是正确的,但是主键可能不应该是
len(k['cavity'])
。这将只考虑字符串的长度。你知道吗我认为您需要提取数字分量,并根据数字对其进行排序:
我使用的正则表达式有点特殊。它希望大写的A-Z字母可以从每个
cavity
的末尾去掉。我是基于你的数据集。如果cavity
不是<numbers><optional letters>
,它可能需要改变使用natural_key() function:
Result
相关问题 更多 >
编程相关推荐