用相同的键在字典值中追加多个值



我想在字典中添加具有相同键的多个值。

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])]})

相关内容

  • 没有找到相关文章