我尝试使用此代码将较小的文件中的一些键和值导入字典中
winner = {}
with open ("Scores.txt") as file:
for line in file:
(key, val) = line.split()
winner[key] = val
我的文件包含以下内容:
Jeff 66
Tom 72
Aaron 34
Eva 47
Aaron 33
Jeff 36
Tom 34
Aaron 67
Tom 76
当我打印字典时,使用相同的键将值覆盖为数据。我想在不更改文件的情况下保持每个玩家的最高分。
这是我想做的事情的伪代码:
If the value in file > value in key:
replace the value in key with the value in file
Else:
Do nothing
答案 0 :(得分:1)
使用dict.get
和max
:
winner = {}
with open ("Scores.txt") as file:
for line in file:
(key, value) = line.split()
winner[key] = max(winner.get(key, 0), int(value))
print(winner)
{'Aaron': 67, 'Eva': 47, 'Jeff': 66, 'Tom': 76}
说明:
winner.get(key, 0)
:如果value
已经具有winner
,则返回key
,否则返回0 max(winner.get(key, 0), int(value))
:比较max
中每个条目的dict
答案 1 :(得分:1)
您可以收集每个键的所有值,然后取最大值。或者,读取每一行,获取键和值,然后检查该值是否高于当前值。如果是,请更换它。 defaultdict(int)
的默认值为0,因此该值应始终低于文件中的任何分数。
from collections import defaultdict
winner = defaultdict(int)
with open ("Scores.txt") as file:
for line in file:
(key, val) = line.split()
val = int(val)
if val > winner[key]:
winner[key] = val
print(winner)
打印defaultdict(<class 'int'>, {'Jeff': 66, 'Tom': 76, 'Aaron': 67, 'Eva': 47})
如果分数可能为负,请使用defaultdict(lambda: -10000)
(或其他任何负数,要低于最低分数)。