Python импортирует данные из файла в словарь и сравнивает данные - PullRequest
1 голос
/ 08 марта 2019

Я попытался импортировать некоторые ключи и значения из сравнительно небольшого файла в словарь, используя этот код

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 ]

1 голос
/ 08 марта 2019

Вы можете собрать все значения для каждого ключа и затем взять макс.Или вместо этого прочитайте каждую строку, получите ключ и значение и проверьте, превышает ли это значение текущее значение.Если это так, замените его.Значение по умолчанию для 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) (или любое другое отрицательное число, меньшее минимально возможного).

1 голос
/ 08 марта 2019

Использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...