Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么排序()将9放在84和878之后?_Python_Python 2.7 - Fatal编程技术网

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