gpt4 book ai didi

python - 如何创建字典,在其中向文本文件中的名称添加点?

转载 作者:太空宇宙 更新时间:2023-11-04 03:36:52 24 4
gpt4 key购买 nike

我正在尝试制作一种评分系统,我得到了一个包含大量(玩家)的文本文件。我创建了一个字典并设法在其中添加了所有名称,但是当我尝试添加点时,它们只得到最后一个数字,而不是每个名称的所有组合。那么如何为每个名字创建一个新的字典,然后添加该名字对应的点呢?

所以我基本上需要取其中一个名字“Anders Johansson”并将他的分数添加到他在字典中的名字中,他的名字将以不同的分数多次存在于 score.txt 中。

我的想法是,我需要运行整个乐谱文件并为每个名字创建一个实例,然后将相应的乐谱添加到每个名字,“Anders Johansson”可能在 score.txt 中出现多达 100 次。此代码会将姓名输入到 final_score 但不是总分。

final_list, file, final_score = [], open('score.txt','r'), {}
string = file.read()
lista = string.split('\n')
lista.sort()
for i in lista[1:]:
final_score[str(i[0:-2])] = 0
final_score[str(i[0:-2])] += int(i[-2:]) # possible error location
final_list = list(final_score.items())
print(sorted(final_list, key=lambda score: score[1],reverse=True))

Example from the file:
Anders Johansson 1
Karin Johansson 1
Eva Johansson 0
Erik Andersson 1
Gunnar Andersson 2
Eva Andersson 1
Nils Eriksson 1
Anders Eriksson 0
Maria Eriksson 1
and so on:

最佳答案

使用 collections.defaultdict :

from collections import defaultdict

final_score = defaultdict(int)

for i in lista[1:]:
final_score[str(i[0:-2])] += int(i[-2:]) #

在您的代码中,您使用 final_score[str(i[0:-2])] = 0 将值重置0每次找到name/key 时,这就是为什么每次只实际添加最后一个分数的原因。

您需要检查 key 是否存在并根据结果继续操作,或者更简单的方法是使用 dict.setdefault在您自己的代码中创建一个 key/value 配对,如果键不存在或者什么都不做:

for i in lista[1:]:
final_score.setdefault(str(i[0:-2]), 0)
final_score[str(i[0:-2])] += int(i[-2:]) # possible error location

你也做了比需要更多的工作,没有必要排序,我们可以遍历文件对象并使用 rsplit 来获取 name得分:

final_score =  defaultdict(int)

with open('score.txt','r') as f: # with will automatically close your file
for line in f: # iterate over file object
# split once on whitespace from right side of string, separating name from score
name, score = line.rsplit(None,1) # unpack
# use our defaultdict to increment the score
final_score[name] += int(score)

# just call sorted on .items()
print(sorted(final_score.items(), key=lambda score: score[1], reverse=True))

不需要排序,因为每当我们遇到一个名字时,我们都会更新字典中的值,我们遇到名字的顺序并不重要,这确实是使用字典的优势之一。

也用于使用 operator.itemgetterfinal_list.items() 进行排序将比使用 lambda 更有效:

from operator import itemgetter
print(sorted(final_list.items(),key=itemgetter(1),reverse=True))

关于python - 如何创建字典,在其中向文本文件中的名称添加点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28613297/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com