【问题标题】:Append multiple value in Dictionary values with same key在具有相同键的字典值中附加多个值
【发布时间】:2021-05-09 17:18:30
【问题描述】:

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

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 数组,所以我无法追加。

【问题讨论】:

    标签: python arrays dictionary numpy-ndarray


    【解决方案1】:

    您在字典中的值对于不同的键并不一致,您以后可能会遇到问题。为什么不首先将其定义为列表?像这样:

    mydict={'dd6729': [np.array([-0.06136101])],
            '941a60': [np.array([-0.03989978])]}
    

    然后,如果您对这些值有任何进一步的处理,那么读取和处理这些值会容易得多。

    【讨论】:

    • 感谢您的建议。
    【解决方案2】:

    问题在于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' 中的第二项)。

    【讨论】:

    • 我想像这样添加 [array([-0.06136101]),array([-0.06136101])] 不像这个 array([-0.06136101, -0.06136101]) .. 我想添加列表中具有相同键的两个不同数组/值。您的答案在同一个数组中添加另一个值。
    【解决方案3】:

    你应该使用这个问题的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)
    

    【讨论】:

    • 添加后:" >> " 我得到了完美的结果。
    【解决方案4】:

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

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

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

    【讨论】:

    • 我想在具有相同键的列表中添加两个不同的数组/值。您的答案在同一个数组中添加另一个值。
    【解决方案5】:

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

    【讨论】:

    • 我想像这样添加 [array([-0.06136101]),array([-0.06136101])] 不像这个 array([-0.06136101, -0.06136101]) .. 我想添加列表中具有相同键的两个不同数组/值。您的答案在同一个数组中添加另一个值。
    • @Sweety Tripathi:已编辑。
    【解决方案6】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-06-09
      • 1970-01-01
      • 1970-01-01
      • 2014-04-27
      • 2022-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多