Python 为什么排序()将9放在84和878之后?
输出:Python 为什么排序()将9放在84和878之后?,python,python-2.7,Python,Python 2.7,输出: 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 {'878': 1
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
{'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”进行比较,并将其放在后面
您可以使用一个软件包(例如可以通过PyPi安装的软件包)获得更自然的排序顺序。您的问题真的很复杂:/因为
'9'>'878'
是正确的。您需要先将键转换为整数。您正在排序字符串,而不是数字。如果需要数字排序,请先将字符串转换为数字。这不是问题的答案,但也可以使用集合。Counter
谢谢大家的帮助
{'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