我有一把带有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)
我会这样做吗?
感谢。
答案 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']