按字母顺序排序字典

Pyt*_*ewb -5 python dictionary

我对此有所研究; 但是,当我尝试在我的代码中实现它时,我没有成功.这是我到目前为止:

f = open('ClassA.txt', 'r')
dictionary = {}
for line in f:
    firstpart, secondpart = line.strip().split(':')
    dictionary[firstpart.strip()] = secondpart.strip()
f.close()
sorted_dict = {k: sorted(v) for k, v in dictionary.items()}
print (sorted_dict)
Run Code Online (Sandbox Code Playgroud)

ClassA.txt 将包含例如:

Jakub Scored: 10
Dan Scored: 10
Jake Scored: 9
Harry Scored: 5
Run Code Online (Sandbox Code Playgroud)

我希望这些名字按顺序按字母顺序排列.但是,当我打印sorted_dict它时,它会出现:

{'Jakub Scored': ['0', '1'], 
 'Dan Scored': ['0', '1'], 
 'Harry Scored': ['5'], 
 'Jake Scored': ['9']}
Run Code Online (Sandbox Code Playgroud)

不仅不是有序,而且10由于某种原因得分的人被错误地打印(向后).

Ffi*_*ydd 5

sorted(v)将按字母顺序对字符串进行排序,返回已排序字符的列表.这将在0之前放置0,因为它是如何定义的(想想0,1,2,3,4,5 ......).

字典本质上是无序的,是关键:值映射的集合.如果您希望按顺序打印字典,按键排序,那么您可以这样做

print(sorted(sorted_dict))
Run Code Online (Sandbox Code Playgroud)

请注意,这不会永久改变字典的排序,如果您print(sorted_dict)在此之后尝试,则排序可能未排序.

如果您需要永久排序的词典,那么您应该查找collections.OrderedDict.

OrderedDicts只记住插入的顺序,你不能对它们进行排序,然后保持排序顺序.使用OrderedDict时,你的代码看起来像这样(注意我已经删除了关于排序10等的位,因为我不认为这是你想要的,但如果你这样做,你可以随时添加它).

注意:您可以忽略关于部件sStringIO,这只是我的测试代码创建一个类似文件的对象.

from collections import OrderedDict
from io import StringIO

s = '''Jakub Scored: 10
Dan Scored: 10
Jake Scored: 9
Harry Scored: 5'''

f = StringIO(s)

dictionary = {}
for line in f:
    firstpart, secondpart = line.strip().split(':')
    dictionary[firstpart.strip()] = secondpart.strip()
f.close()

sorted_dict = OrderedDict(sorted(dictionary.items()))

print(sorted_dict)
# OrderedDict([('Dan Scored', '10'), ('Harry Scored', '5'), ('Jake Scored', '9'), ('Jakub Scored', '10')])
Run Code Online (Sandbox Code Playgroud)