python sorted函数未按预期执行数字排序

时间:2018-12-11 11:15:12

标签: python sorting

我有以下代码:

dict1={'1':'Ajay','1201':'Badol','102':'Cynthia','2':'Ravi','201':'John'}
for key,val in sorted(dict1.items()):
    print (key,val)

我得到的输出:

('1', 'Ajay')
('102', 'Cynthia')
('1201', 'Badol')
('2', 'Ravi')
('201', 'John')

我期望:

('1', 'Ajay')
('2', 'Ravi')
('102', 'Cynthia')
('201', 'John')
('1201', 'Badol')

如何实现?

3 个答案:

答案 0 :(得分:2)

它按字符串排序,一个字符一个字符。您需要将其转换为整数才能按数字排序。

for key,val in sorted(dict1.items(), key=lambda x: int(x[0])):
    print (key,val)

答案 1 :(得分:1)

我会做的,将密钥转换为int:

dict(sorted({int(k):v for k,v in dict1.items()}.items()))

{1: 'Ajay', 2: 'Ravi', 102: 'Cynthia', 201: 'John', 1201: 'Badol'}

说明:

1。{int(k):v for k,v in dict1.items()}:将每个键转换为整数
2. sorted({int(k):v for k,v in dict1.items()}.items()):根据字典的键调用字典上的排序函数。
3. dict:上面的排序函数返回一个元组列表,因此我们需要再次对其进行口述。

答案 2 :(得分:1)

由于您的密钥是字符串,因此您会获得“字符串”顺序。 您可以提供自己的密钥,如下所示:

>>> for key in sorted(dict1.items(), key=lambda item: int(item[0])):
...   print(key, val)
...
('1', 'Ajay') John
('2', 'Ravi') John
('102', 'Cynthia') John
('201', 'John') John
('1201', 'Badol') John

这将小节视为数字,给出我想得到的。