我对此有所研究;但是,当我尝试在我的代码中实现它时,我没有成功。这就是我到目前为止所做的:
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)
ClassA.txt
将包含例如:
Jakub Scored: 10
Dan Scored: 10
Jake Scored: 9
Harry Scored: 5
我希望这些名字按字母顺序排列。但是,当我打印sorted_dict
时,它会出现:
{'Jakub Scored': ['0', '1'],
'Dan Scored': ['0', '1'],
'Harry Scored': ['5'],
'Jake Scored': ['9']}
不仅没有按顺序排列,而且由于某种原因得分10
的人也被错误地打印(向后)。
答案 0 :(得分:5)
sorted(v)
将按字母顺序对字符串进行排序,返回已排序字符的列表。这将在0之前放置0,因为它们是如何定义的(想想0,1,2,3,4,5 ......)。
字典本质上是无序的,是关键字:值映射的集合。如果您希望按顺序打印字典,按键排序,则可以
print(sorted(sorted_dict))
请注意,这不会永久改变字典的排序,如果在此之后尝试print(sorted_dict)
,则排序可能会被排除。
如果您需要永久排序的词典,那么您应该查找collections.OrderedDict
。
OrderedDicts只记住插入顺序,你不能对它们进行排序,然后保持排序顺序。使用OrderedDict时,您的代码可能看起来像这样(请注意我已经删除了有关排序10的内容等等,因为我不会认为这就是你的意思想要,但如果你这样做,你可以随时添加它。
注意:您可以忽略有关s
和StringIO
的部分,这只是我创建一个类似文件的对象来测试代码。
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')])