修改其中一个值时,数组中字典的多个相似值会更改

时间:2020-03-04 16:11:21

标签: python python-3.x numpy dictionary

假设我正在对数组执行以下操作:

>>arr = np.array([1,2,34,567,433243,787,832])
>>h = np.where(arr < 100, {'hello' : 1}, {'hi' : 2 })
array([{'hello': 1}, {'hello': 1}, {'hello': 1}, {'hi': 2}, {'hi': 2},{'hi': 2}, {'hi': 2}], dtype=object)

当我尝试在某些选择性索引处添加键值对时,它会在所有索引中复制,并给我类似的东西:

>>h[0]['hola']=12
>>h[4]['heyy']=11
>>h
array([{'hello': 1, 'hola': 12}, {'hello': 1, 'hola': 12},{'hello': 1, 'hola': 12}, {'hi': 2, 'heyy': 11},{'hi': 2, 'heyy': 11}, {'hi': 2, 'heyy': 11},{'hi': 2, 'heyy': 11}], dtype=object)

虽然我希望这些值仅在那些特定的索引(0和4)处发生变化,并得到如下所示:

array([{'hello': 1, 'hola': 12}, {'hello': 1}, {'hello': 1}, {'hi': 2}, {'hi': 2, 'heyy': 11}, {'hi': 2,}, {'hi': 2}], dtype=object)

如何获得所需的输出?。谢谢!

1 个答案:

答案 0 :(得分:1)

您将3个args传递给np。其中一个条件为表达式为true以及为false的条件。这些表达式在传递给where方法之前先进行求值。这样,一次为true创建一次字典,一次为false创建一次字典,则只要该布尔值出现在表达式中,便会使用相同的字典。

在这种情况下,您仅可以使用列表理解来实现所需的功能。

h = np.array([{'hello': 1} if i < 100 else {'hi': 2} for i in arr])