Python将数据从文件导入字典并比较数据

时间:2019-03-08 10:24:51

标签: python file dictionary

我尝试使用此代码将较小的文件中的一些键和值导入字典中

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

2 个答案:

答案 0 :(得分:1)

使用dict.getmax

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)(或其他任何负数,要低于最低分数)。