微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用相同的键在字典值中附加多个值

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

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)
,

创建一个新的 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])]}
,

在 mydict[i].append(v) 中,mydict[i] 是一个没有附加属性的 numpy 数组。

如果想追加到numpy数组,可以使用np.append。 即

    for i,v in mydict.items():
        mydict[i] = np.append(mydict[i],v)
,

将字典值转换为列表,然后将另一个数组值附加到它后,将提供所需的输出。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。