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由于某种原因得分的人被错误地打印(向后).
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等的位,因为我不认为这是你想要的,但如果你这样做,你可以随时添加它).
注意:您可以忽略关于部件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')])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |