向字典添加三个参数但错误消息表明它需要2个参数

时间:2014-12-01 17:39:27

标签: python python-3.x

我正在尝试在我的字典中添加第三个参数,但会收到一条错误消息,表明它只需要2个参数

from collections import deque

#setting up a dictionary so that only the recent most recent values are stored
player_stats = {}
with open("players.dat") as f:
for line in f:
    classcode, name, score = line.split()
    player_stats.setdefault(classcode, name, deque(maxlen=3))  
    player_stats[name].append(int(score))       

print(player_stats)

我的数据是:1,鲁尼,56等等其他玩家。

我无法理解为什么会收到此错误,我们将非常感谢任何帮助。

干杯

2 个答案:

答案 0 :(得分:1)

如果你真的想要一个只为每个玩家存储最新三个统计数据的数据结构(而不​​是将它们全部存储并在输出时截断它们),你可以使用deque

from collections import deque

player_stats = {}
with open("players.dat") as f:
    for line in f:
        name, score = line.split()
        player_stats.setdefault(name, deque(maxlen=3))
        player_stats[name].append(score)

print(player_stats)

答案 1 :(得分:0)

正如@kevin建议的那样,使用一个字典,其中播放器名称为键,分数列表为值:

scores = {}
with open("players.dat") as f:
    for line in f:
        fields = line.split()
        scores.setdefault(fields[0], []).append(fields[1])

setdefault调用会向fields[0]添加一个名称(scores),如果它尚未存在,则将该列表设置为该项目的值。然后,我们将当前分数(fields[1])附加到此列表中。

现在你有一个dict,玩家名字指向所有分数的列表。仅打印最后3个分数:

for k, v in scores.items():
     print("%s -> %s" % (k, ", ".join(v[-3:])))

在这里,我假设最后3个分数是你想要显示的,因此是", ".join(v[-3:])