获取 Python 带计算的输出字典

Getting Python Output Dictionary with calculations

我是 Python 和 Whosebug 的新手。我目前正忙于在线学习 Python,我需要完成一个项目,该项目需要 Python 代码的非常具体的输出才能继续该项目。 我被困在一个问题上一个多星期了,我找不到解决方案。因此,我们非常欢迎任何帮助。

我们来自此数据 (datos_lista):

('23', 'RETIRO', 'Despejado', (25, 29), 0)
('22', 'MONCLOA-ARAVACA', 'Despejado', (21, 24), 6)
('20', 'FUENCARRAL-EL PARDO', 'Despejado', (45, 49), 14)
('20', 'FUENCARRAL-EL PARDO', 'Despejado', (25, 29), 7)
('20', 'FUENCARRAL-EL PARDO', 'Despejado', (25, 29), 4)

enter image description here

我们需要做的是:

  1. datos_lista[3] 分组依据 (AgeRange = (21,24),...):

按年龄段分组 ((25, 29),(21, 24),(45, 49),...)

  1. datos_lista[3] 计数:

计算 AgeRange 出现的次数。

  1. 并且,3- datos_lista[4]== 计数如果 == 4:

计算 datos_lista[4]== 4 的次数 (在上面的例子中,这只在最后一行出现一次) (('20', 'FUENCARRAL-EL PARDO', 'Despejado', (25, 29), 4))

问题要求我提供以下输出:

Output required

所有这些都需要在这个“代码检查”上工作:

"""# Prueba de funcionamiento1:

total_accidentes_y_muertes_por_edades = totales_mortales(datos_lista)

for k, totales in total_accidentes_y_muertes_por_edades.items: print(k, totales)
print()

"""# Prueba de funcionamiento2:

tasa_accidentes_mortales_por_mil = [(k, m*1000/n) for k, (n, m) in total_accidentes_y_muertes_por_edades.items()]

for k_tasa  in tasa_accidentes_mortales_por_mil:
print(k_tasa)
                      

"""

我已经能够单独生成代码并匹配解决方案,但它们都没有通过“代码检查”或一起产生输出。

代码尝试次数:

1-

def totales (datos_lista):
from collections import Counter
totales1 = Counter()

for p in datos_lista:
    totales1[p[3]] += 1


return(totales1)

2-

def totales2 (datos_lista):

from collections import Counter
from collections import defaultdict

totales2 = Counter()
for q in datos_lista:
    if q [4] == 4:
        totales2[q[3]] += 1

return(totales2)

非常感谢您, (如果有任何不清楚的地方请告诉我,我是新手所以我不知道如何正确地表述它以使其足够清楚) 丹尼尔

你的Prueba de funcionamiento1代码有问题,total_accidentes_y_muertes_por_edades.items是一个方法,你没有调用它,你对它做了一个for循环,所以它会抛出异常。

根据你对问题的描述,我定义了函数totales2并得到了输出

datos_lista = [
    ('23', 'RETIRO', 'Despejado', (25, 29), 0),
    ('22', 'MONCLOA-ARAVACA', 'Despejado', (21, 24), 6),
    ('20', 'FUENCARRAL-EL PARDO', 'Despejado', (45, 49), 14),
    ('20', 'FUENCARRAL-EL PARDO', 'Despejado', (25, 29), 7),
    ('20', 'FUENCARRAL-EL PARDO', 'Despejado', (25, 29), 4)
]


def totales2(datos_lista):
    counter = {}
    for *_, age_range, c in datos_lista:
        t = counter.setdefault(age_range, [0, 0])
        t[0] += 1
        if c == 4:
            t[1] += 1
    return counter


total_accidentes_y_muertes_por_edades = totales2(datos_lista)

for k, totales in total_accidentes_y_muertes_por_edades.items():
    print(k, totales)

print()


tasa_accidentes_mortales_por_mil = [(k, m*1000/n) for k, (n, m) in total_accidentes_y_muertes_por_edades.items()]

for k_tasa in tasa_accidentes_mortales_por_mil:
    print(k_tasa)

输出:

(25, 29) [3, 1]
(21, 24) [1, 0]
(45, 49) [1, 0]

((25, 29), 333.3333333333333)
((21, 24), 0.0)
((45, 49), 0.0)