在字典中将for循环的结果存储在数组中

时间:2019-03-11 17:28:39

标签: python python-3.x dictionary

主要我有这本字典rhs

'obj' was not declared in this scope

我试图仅对rhs中的值进行规范化,然后将它们再次存储在另一个字典switch中,所以每个键的值总和必须等于1,但我不能!我需要以这种方式存储它们,以便以后能够调用每个值数组都属于某个键,例如:

rhs
{{('1', '3'): [0.06081006262521797, 0.4965853037914095], ('1', '4'): [0.0018363047770289071], ('3', '2'): [0.4965853037914095]}
type(rhs1)
<class 'dict'>

所以我写了

rhs_normalized

我收到此错误

 rhs_normalized
{('1', '3'): [0.10909682119561295, 0.8909031788043871], ('1', '4'): [1.0], ('3', '2'): [1.0]}

我认为是由于rhs {{('1', '3'): [0.06081006262521797, 0.4965853037914095], ('1', '4'): [0.0018363047770289071], ('3', '2'): [0.4965853037914095]} type(rhs1) <class 'dict'> rhs_normalized = {} for each_array in list(rhs1.values()): each_array_of_values_equal = [] for i in each_array : each_array_of_values_equal.append(i/sum(each_array)) rhs_normalized[each_array] = each_array_of_values_equal 导致的错误,因为据我了解,我试图将列表用作字典的键,并且该键不可散列!

对于初学者来说,这似乎是一个常见错误,因此我尝试了许多Internet上可用的解决方案,但均未成功。预先感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您正在将列表用作dict键(不可散列并且不能用作键)。根据您的示例输出,我想您的意思是使用现有的dict键并转换列表值。

例如(简化了构建第二个字典的过程):

data = {('1', '3'): [0.06081006262521797, 0.4965853037914095], ('1', '4'): [0.0018363047770289071], ('3', '2'): [0.4965853037914095]}

result = {k: [v / sum(vals) for v in vals] for k, vals in data.items()}
print(result)
# {('1', '3'): [0.10909682119561295, 0.8909031788043871], ('1', '4'): [1.0], ('3', '2'): [1.0]}