在for循环中提取字典值以填充列表

时间:2018-08-23 11:23:56

标签: python numpy dictionary

我有此代码:

import numpy as np

result = {}
result['depth'] = [1,1,1,2,2,2]
result['generation'] = [1,1,1,2,2,2]
result['dimension'] = [1,2,3,1,2,3]
result['data'] = [np.array([0,0,0]), np.array([0,0,0]), np.array([0,0,0]), np.array([0,0,0]), np.array([0,0,0]), np.array([0,0,0])]

for v in np.unique(result['depth']):
    temp_v = np.where(result['depth'] ==  v)
    values_v = [result[string][temp_v] for string in result.keys()]
    this_v = dict(zip(result.keys(), values_v))

我要在其中创建一个名为“ dict”的新this_v,其键与原始字典result相同,但值要少。

该行:

values_v = [result[string][temp_v] for string in result.keys()]

出现错误

  

TypeError:列表索引必须是整数,而不是元组

我不了解,因为我可以创建 ex = result[result.keys()[0]][temp_v]了。只是不允许我使用for循环执行此操作,以便我可以填充列表。

关于它为什么不起作用的任何想法吗?

1 个答案:

答案 0 :(得分:2)

我不确定您要实现什么目标,但是我可以解决您的问题:

np.where返回一个元组,因此要访问它,必须给索引temp_v [0]。另外,元组的值是一个数组,因此要遍历该值,您需要运行另一个循环a for a in temp_v[0],以帮助您访问该值。

import numpy as np

result = {}
result['depth'] = [1,1,1,2,2,2]
result['generation'] = [1,1,1,2,2,2]
result['dimension'] = [1,2,3,1,2,3]
result['data'] = [np.array([0,0,0]), np.array([0,0,0]), np.array([0,0,0]), np.array([0,0,0]), np.array([0,0,0]), np.array([0,0,0])]

for v in np.unique(result['depth']):
    temp_v = np.where(result['depth'] ==  v)
    values_v = [result[string][a] for a in temp_v[0] for string in result.keys()]
    this_v = dict(zip(result.keys(), values_v))