从字典值中的嵌套列表中查找列的平均值

时间:2014-11-24 05:39:50

标签: python average

我有一把带有2把钥匙的字典(狗和猫):

d = {'dog': [['4.1', '7.0', 'dog'], ['1.2', '3.4', 'dog']], 'cat': [['1', '8.2', '5.501', 'cat'], ['6.5', '8', '9.1', 'cat']]}

我需要找到每个键的值的嵌套列表的平均值。例如,对于狗,我需要找到4.1和1.2的平均值,以及7.0和3.4。

我遇到的问题是嵌套列表的数字是字符串。我想我需要一个外部while循环来控制列号,然后一个内部while循环来控制行号,但是我不知道如何设置它。如何访问每个键的内部列表,然后访问更深的列表以查找平均值?

for keys in d:
    for values in d[keys]:
        (2 while loops here)

我会这样做吗?

感谢。

2 个答案:

答案 0 :(得分:1)

假设字典中的值包含仅两个元素(又是列表)的列表:

d = {'dog': [['4.1', '7.0', 'dog'], ['1.2', '3.4', 'dog']], 'cat': [['1', '8.2', '5.501', 'cat'], ['6.5', '8', '9.1', 'cat']]}

avg_dict = {}
for key in d:
    avg_list = []
    i = 0
    while (i < len(d[key][0]) - 1):
        avg_list.append((float(d[key][0][i]) + float(d[key][1][i])) /2.0)
        i += 1
    avg_dict[key] = avg_list

print(avg_dict)

答案 1 :(得分:1)

def calc_avg(animal):
    vals = [map(float, animal[i][:-1]) for i in range(len(animal))]
    animal_name = animal[0][-1:]
    return map(lambda tup: sum(tup)/len(tup), zip(*vals)) + animal_name    


d = {'dog': [['4.1', '7.0', 'dog'], ['1.2', '3.4', 'dog']], 'cat': [['1', '8.2', '5.501', 'cat'], ['6.5', '8', '9.1', 'cat']]}
print calc_avg(d['cat']) # prints [3.75, 8.1, 7.3004999999999995, 'cat']