【问题标题】:Python import data from file to dictionary and compare dataPython将数据从文件导入字典并比较数据
【发布时间】:2019-03-08 10:24:51
【问题描述】:

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

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

【问题讨论】:

    标签: python file dictionary


    【解决方案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):如果winner 已经有key,则返回value,否则为0
    • max(winner.get(key, 0), int(value)):比较max 的每个dict 条目

    【讨论】:

      【解决方案2】:

      您可以收集每个键的所有值,然后取最大值。或者,读取每一行,获取键和值并检查该值是否高于当前值。如果是,请更换它。 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)(或任何其他负数,低于可能的最低分)。

      【讨论】:

        猜你喜欢
        • 2013-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-06
        • 2021-03-18
        • 2021-12-23
        • 1970-01-01
        • 2017-09-30
        相关资源
        最近更新 更多