【发布时间】:2022-01-10 23:40:45
【问题描述】:
我需要一些帮助来计算字典值的分数。
考虑下面的字典,其中键是玩家 ID(1,2...N 的整数),值是排名列表(即,1,2,...,N 在某些排列中的不同整数)。 N=4 的示例:
player = {1: [4, 2, 1, 3], 2: [4, 3, 1, 2], 3: [4, 3, 1, 2], 4: [1, 3, 4, 2], 5: [2, 3, 4, 1], 6: [2, 1, 3, 4]
我已使用以下代码分配所需的分数,y[i],如下所示:
y = {}
for val in player.values():
allValues = list(val)
uniqueRank = set(allValues)
for i in uniqueRank:
z = 0
for value in player.values():
if i == value[-1]:
z += 0
elif i == value[0]:
z+= 3
elif i == value[1]:
z+= 2
elif i == value[2]:
z+= 1
y[i] = z
print(y)
这会给我以下分数,这些分数是正确的,也是我想要的:
{1: 8, 2: 8, 3: 9, 4: 11}
但是,我想简化此代码,自动将值分配给 z 而不是 if..elif 子句:
elif i == value[1]:
z+= 2
例如。
编辑:组件
for val in player.values():
allValues = list(val)
uniqueRank = set(allValues)
只是从上面的字典中抓取唯一值,所以在这方面它只是收集1-4,这就是玩家所用的。
【问题讨论】:
-
从你的描述中很难理解你的代码在做什么:计算一些排名的总和,或者其他什么。你必须显示
player.values()的价值,我们不能关注for val in player.values(): ... allValues = list(val) ... range = set(allValues)部分。此外,range是一个内置函数,不要重新分配,将该变量称为其他变量。 -
另外,您的标题令人困惑:字典没有“索引”,不像列表。你能修正你的标题吗?字典有键和值。似乎每个键的“值”是一个排名列表,然后您希望将其转换为权重。你知道
i == value[-1]:正在测试value中的last 元素吗? -
是的,我 == value[-1]: 始终将最后一个值分配为 0。我现在将处理所有其他事情,谢谢 :)
-
是否每个“值”都是长度为 4 的列表?否则,某些解决方案将失败。
-
这些值是什么意思?球员人数排名?或者是其他东西。它们可以包含重复项吗?其他整数,如 0,5,6?它们是长度为 4 的意义是什么?帮助我们帮助您...
标签: python dictionary