我想在字典中添加具有相同键的多个值。
mydict={'dd6729': np.array([-0.06136101]),
'941a60': np.array([-0.03989978])}
所需输出:
{'dd6729': [array([-0.06136101]),array([-0.06136101])], '941a60': [array([-0.03989978]),array([-0.06136101])]}
我试过这样做:
for i,v in mydict.items():
mydict[i].append(v)
print(mydict)
但是得到错误
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-398-fbc8d90525de> in <module>
1 for i,v in mydict.items():
----> 2 mydict[i].append(v)
3 print(mydict)
4
AttributeError: 'numpy.ndarray' object has no attribute 'append'
由于值是Numpy数组,所以我无法追加。
对于不同的键,字典中的值是不一致的,以后可能会遇到问题。你为什么不把它定义为一个列表呢?这样的:
mydict={'dd6729': [np.array([-0.06136101])],
'941a60': [np.array([-0.03989978])]}
然后,如果您对这些值进行了进一步的处理,那么读取和处理这些值就会容易得多。
问题是mydict[i]
是numpy.ndarray
,所以要附加到它,您要么需要使用numpy.append
函数,要么使用常规列表代替。
for i,v in mydict.items():
mydict[i] = np.append(mydict[i], v)
print(mydict)
注:
我不知道这是不是你的意思,但是输出变成了:
{'dd6729': array([-0.06136101, -0.06136101]), '941a60': array([-0.03989978, -0.03989978])}
而不是您想要的输出('941a60'
中的第二项)。
你应该使用这个问题的defaultdict
from collections import defaultdict
mydict={'dd6729': np.array([-0.06136101]),
'941a60': np.array([-0.03989978])}
new_dict=defaultdict(list)
for i,v in mydict.items():
new_dict[i].append(v)
print(new_dict)
在mydict[i].append(v)中,mydict[i]是一个numpy数组,它没有append属性。
如果想要追加numpy数组,可以使用np.append。例如
for i,v in mydict.items():
mydict[i] = np.append(mydict[i], v)
创建一个新的Python列表并替换旧值:
mydict={'dd6729': np.array([-0.06136101]),
'941a60': np.array([-0.03989978])}
for i,v in mydict.items():
mydict[i] = [v, v]
print(mydict)
:
{'dd6729': [array([-0.06136101]), array([-0.06136101])], '941a60': [array([-0.03989978]), array([-0.03989978])]}
将字典值转换为列表,然后将另一个数组值附加到列表中,得到所需的输出。
from collections import defaultdict
mydict={'dd6729': np.array([-0.06136101]),
'941a60': np.array([-0.03989978])}
new_dict=defaultdict(list)
for i,v in mydict.items():
new_dict[i].append(v)
for i,v in new_dict.items():
new_dict[i].append(v[0])
输出:
defaultdict(list,
{'dd6729': [array([-0.06136101]), array([-0.06136101])],
'941a60': [array([-0.03989978]), array([-0.03989978])]})