关于python:为什么sorted()在84和878之后放9?

Why does sorted() put 9 after 84 and 878?

本问题已经有最佳答案,请猛点这里访问。
1
2
3
4
5
6
7
8
numbers = ['3','1','6','5','4','4','3','2','1','4','3','5','4','9','84','7','878','6']
counts = dict()
for number in numbers:
    counts[number] = counts.get(number, 0) + 1
print counts

for k,v in sorted(counts.items()):
    print k,v

输出:

1
2
3
4
5
6
7
8
9
10
11
{'878': 1, '1': 2, '3': 3, '2': 1, '5': 2, '4': 4, '7': 1, '6': 2, '9': 1, '84': 1}
1 2
2 1
3 3
4 4
5 2
6 2
7 1
84 1
878 1
9 1

为什么9是最后一个而不是84和878?


因为它在词汇学上比较。878中的"8"在词典编纂顺序中位于"9"之前。您将作为字符串而不是整数进行比较。


因为你已经把你的数字作为字符串放进去了,所以它们是按字典顺序排列的,按照字符串中的字符排列的。所以"9"与"898"中的前"8"进行比较,然后再进行比较。

您可以通过使用一个包(如natsort)获得更自然的排序顺序,该包可以通过pypi安装。


因为你在比较字符串,你想比较数字。