如何将np.ndarray中的词典合并到一个词典中?

2024-09-28 23:31:03 发布

您现在位置:Python中文网/ 问答频道 /正文

在我关于Convert Dataframe to Nested Dictionary in Python的问题之后,我一直在尝试将Pandas数据帧转换为嵌套字典

当前的挑战是将np.ndarray中的多个词典合并为一个词典

  1. 我当前的输出dkl

    array([{0.7863340563991272: 0.0002639915522703274},
           {0.7863340563991272: 0.0006863780359028511}], dtype=object)
    

    当检查type结果时numpy.ndarray

  2. 我需要让dkl成为

    {0.7863340563991272: 0.0002639915522703274,
     0.7863340563991272: 0.0006863780359028511}
    

我没能得到想要的结果。我试图将dkl变成l1 = list(dkl),结果是:

[{0.7863340563991272: 0.0002639915522703274},
 {0.7863340563991272: 0.0006863780359028511}]

我现在可以得到上面列表中的两个元素it1 = {0.7863340563991272: 0.0002639915522703274}it2 = {0.7863340563991272: 0.0006863780359028511},我正试图将它们合并到一个字典中。我试过:

 dict(it1.items() + it2.items())

导致:

TypeError                                 Traceback (most recent call last)
<ipython-input-150-4422fd31b345> in <module>
----> 1 dict(it1.items() + it2.items())

TypeError: unsupported operand type(s) for +: 'dict_items' and 'dict_items'

简而言之,我需要从12。 更新:Ref在评论中提到,这种输出形式在dict中是不可能的,我很想了解它是如何产生的:enter image description here

原因是我需要复制一个数据集,它的结构如上所示,在我想要的输出中,如果不能使用dict,我不知道它是如何创建的


Tags: to数据inconvertdataframe字典typeitems
1条回答
网友
1楼 · 发布于 2024-09-28 23:31:03
In [10]: dkl=np.array([{0.7863340563991272: 0.0002639915522703274}, 
    ...:        {0.7863340563991272: 0.0006863780359028511}], dtype=object)                          
In [11]: dkl                                                                                         
Out[11]: 
array([{0.7863340563991272: 0.0002639915522703274},
       {0.7863340563991272: 0.0006863780359028511}], dtype=object)

对于(大多数)实际用途,对象数据类型数组是一个列表。您的list(dkl)会显式地执行此操作,或者tolist()

In [12]: alist = dkl.tolist()                                                                        
In [13]: alist                                                                                       
Out[13]: 
[{0.7863340563991272: 0.0002639915522703274},
 {0.7863340563991272: 0.0006863780359028511}]

合并词典的一种方法是update

In [14]: d1 = alist[0]                                                                               
In [15]: for d in alist[1:]: d1.update(d)                                                            
In [16]: d1                                                                                          
Out[16]: {0.7863340563991272: 0.0006863780359028511}

在您的例子中,两者都有相同的键,因此结果是列表中的最后一个字典

{0.7863340563991272: 0.0002639915522703274,
 0.7863340563991272: 0.0006863780359028511}

这是不可能的,因为字典的键是唯一的

其他可能的合并包括使用匹配键添加值,或使用值列表。我不确定我是否应该花时间在这些东西上,因为你似乎不知道你真正需要什么

您尝试添加items;使用py3列表(项),我们可以得到元组列表:

In [20]: [list(d.items()) for d in dkl]                                                              
Out[20]: 
[[(0.7863340563991272, 0.0002639915522703274)],
 [(0.7863340563991272, 0.0006863780359028511)]]

其中元组包含键和值。但是除了连接,我不知道你想用这些元组做什么

总之,您有一组字典,它们可能有匹配的键,也可能没有匹配的键。这里没什么特别的,小聪明

相关问题 更多 >