尝试在python中操纵条形图的数据以获得测试分数

尝试在python中操纵条形图的数据以获得测试分数,python,django,Python,Django,试图在python中为x轴的测试分数操纵条形图数据,我们有0--100%的步骤9,因此如果一个用户的分数为4,它将处于步骤0--9,如果另一个用户的分数为3,它将被计算为该步骤中的2人。如有任何帮助,我们将不胜感激。谢谢 score = {"0 - 10": 0, "11 - 20": 0, "21 - 30": 0, "31 - 40": 0, "41 - 50": 0, &q

试图在python中为x轴的测试分数操纵条形图数据,我们有0--100%的步骤9,因此如果一个用户的分数为4,它将处于步骤0--9,如果另一个用户的分数为3,它将被计算为该步骤中的2人。如有任何帮助,我们将不胜感激。谢谢

score = {"0 - 10": 0, "11 - 20": 0, "21 - 30": 0, "31 - 40": 0, "41 - 50": 0,
         "51 - 60": 0, "61 - 70": 0, "71 - 80": 0, "81 - 90": 0,
         "91 - 100": 0}

OUTCOMES = {}
for i in range(0, 10):
    OUTCOMES[i] = score["0 - 10"] = + 1
for i in range(11, 20):
    OUTCOMES[i] = score["11 - 20"] = + 1
for i in range(21, 30):
    OUTCOMES[i] = score["21 - 30"] = + 1
for i in range(31, 40):
    OUTCOMES[i] = score["31 - 40"] = + 1
for i in range(41, 50):
    OUTCOMES[i] = score["41 - 50"] = + 1
for i in range(51, 60):
    OUTCOMES[i] = score["51 - 60"] = + 1
for i in range(61, 70):
    OUTCOMES[i] = score["61 - 70"] = + 1
for i in range(71, 80):
    OUTCOMES[i] = score["71 - 80"] = + 1
for i in range(81, 90):
    OUTCOMES[i] = score["81 - 90"] = + 1
for i in range(91, 100):
    OUTCOMES[i] = score["91 - 100"] = + 1

默认情况下,任何键都将返回0:

OUTCOMES = defaultdict(lambda: 0)
[... fill outcomes dict]
因此,当您增加分数dict的值时,它不会在任何分数上失败:

for i in range(0, 10):
    score["0 - 10"] += OUTCOMES[i]
此外,还可以通过范围映射简化表达式:

RANGES = {
    "0 - 10": range(10),
    "10 - 20": range(10, 20),
    ...
}
所以你的新表达可以是:

for rg in RANGES:
    rg_obj = RANGES[rg]
    score[rg] += sum([OUTCOMES[ix] for ix in rg_obj])

例如,您可以使用
defaultdict
作为方便的条形计数累加器:

from collections import defaultdict

def get_slot(x):
    """Maps value to bin name"""
    tens = (x-1)//10
    return f'{tens*10+1} - {(tens+1)*10}'

# Empty dictionary with default values equal to zero
counts = defaultdict(int)

# example input data and usage
scores = [1, 2, 7, 15, 16, 30, 80]
for value in scores:
    counts[get_slot(value)] += 1

print(counts)
# Outputs:
# defaultdict(<class 'int'>, {'1 - 10': 3, '11 - 20': 2, '21 - 30': 1, '71 - 80': 1})
从集合导入defaultdict
def get_插槽(x):
“”“将值映射到bin名称”“”
十位数=(x-1)//10
返回f'{tens*10+1}-{(tens+1)*10}'
#默认值等于零的空字典
计数=defaultdict(int)
#示例输入数据和用法
分数=[1,2,7,15,16,30,80]
对于分数中的值:
计数[获取插槽(值)]+=1
打印(计数)
#产出:
#defaultdict(,{'1-10':3,'11-20':2,'21-30':1,'71-80':1})

请注意,您的条槽不相等。第一个(0-10)与其他值相比包含更多值。因此,我的示例将0和1-10放入不同的插槽中。如果您希望将它们组合在一起,您可以在
get_slot
函数中添加
If
检查零输入。

为我们提供一个最小的、可复制的示例,以了解您的尝试。您希望增加什么,分数值还是结果值?分数值基于在分数范围内得分的人数,如果有更好的方法来解决这个问题,那么你从哪里知道人们评分的nr呢?因此,假设结果是检查输入并根据用户评分自动递增,然后更新评分dic