将带有嵌套字典的列表转换为字典

时间:2021-07-12 18:46:48

标签: python

我有如下所示格式的数据,我认为这是一个带有嵌套字典的列表:

data = [{'slipstream_internal/slipstream_hq/27/CLG-MAXFLOW': 580.0, 
         'slipstream_internal/slipstream_hq/29/CLG-MAXFLOW': 1400.0, 
         'slipstream_internal/slipstream_hq/30/CLG-MAXFLOW': 918.0,  
         'slipstream_internal/slipstream_hq/6/CLG-MAXFLOW': 760.0, 
         'slipstream_internal/slipstream_hq/10/CLG-MAXFLOW': 210.0, 
         'slipstream_internal/slipstream_hq/8/CLG-MAXFLOW': 880.0, 
         'slipstream_internal/slipstream_hq/9/CLG-MAXFLOW': 1040.0, 
         'slipstream_internal/slipstream_hq/11/CLG-MAXFLOW': 700.0, 
         'slipstream_internal/slipstream_hq/13/CLG-MAXFLOW': 1030.0, 
         'slipstream_internal/slipstream_hq/14/CLG-MAXFLOW': 1030.0, 
         'slipstream_internal/slipstream_hq/15/CLG-MAXFLOW': 500.0, 
         'slipstream_internal/slipstream_hq/16/CLG-MAXFLOW': 370.0, 
         'slipstream_internal/slipstream_hq/19/CLG-MAXFLOW': 970.0, 
         'slipstream_internal/slipstream_hq/20/CLG-MAXFLOW': 560.0, 
         'slipstream_internal/slipstream_hq/21/CLG-MAXFLOW': 1410.0, 
         'slipstream_internal/slipstream_hq/23/CLG-MAXFLOW': 390.0, 
         'slipstream_internal/slipstream_hq/24/CLG-MAXFLOW': 320.0, 
         'slipstream_internal/slipstream_hq/25/CLG-MAXFLOW': 1200.0, 
         'slipstream_internal/slipstream_hq/26/CLG-MAXFLOW': 815.0, 
         'slipstream_internal/slipstream_hq/31/CLG-MAXFLOW': 1214.0, 
         'slipstream_internal/slipstream_hq/34/CLG-MAXFLOW': 735.0,  
         'slipstream_internal/slipstream_hq/36/CLG-MAXFLOW': 3000.0, 
         'slipstream_internal/slipstream_hq/37/CLG-MAXFLOW': 275.0,  
         'slipstream_internal/slipstream_hq/38/CLG-MAXFLOW': 1690.0, 
         'slipstream_internal/slipstream_hq/39/CLG-MAXFLOW': 270.0}
         , {}]

最后总有一个空字典可以丢弃。有人可以告诉我如何将此数据类型转换为一个字典,使其看起来像下面这样吗?

data = {'slipstream_internal/slipstream_hq/27/CLG-MAXFLOW': 580.0, 
         'slipstream_internal/slipstream_hq/29/CLG-MAXFLOW': 1400.0, 
         'slipstream_internal/slipstream_hq/30/CLG-MAXFLOW': 918.0,  
         'slipstream_internal/slipstream_hq/6/CLG-MAXFLOW': 760.0, 
         'slipstream_internal/slipstream_hq/10/CLG-MAXFLOW': 210.0, 
         'slipstream_internal/slipstream_hq/8/CLG-MAXFLOW': 880.0, 
         'slipstream_internal/slipstream_hq/9/CLG-MAXFLOW': 1040.0, 
         'slipstream_internal/slipstream_hq/11/CLG-MAXFLOW': 700.0, 
         'slipstream_internal/slipstream_hq/13/CLG-MAXFLOW': 1030.0, 
         'slipstream_internal/slipstream_hq/14/CLG-MAXFLOW': 1030.0, 
         'slipstream_internal/slipstream_hq/15/CLG-MAXFLOW': 500.0, 
         'slipstream_internal/slipstream_hq/16/CLG-MAXFLOW': 370.0, 
         'slipstream_internal/slipstream_hq/19/CLG-MAXFLOW': 970.0, 
         'slipstream_internal/slipstream_hq/20/CLG-MAXFLOW': 560.0, 
         'slipstream_internal/slipstream_hq/21/CLG-MAXFLOW': 1410.0, 
         'slipstream_internal/slipstream_hq/23/CLG-MAXFLOW': 390.0, 
         'slipstream_internal/slipstream_hq/24/CLG-MAXFLOW': 320.0, 
         'slipstream_internal/slipstream_hq/25/CLG-MAXFLOW': 1200.0, 
         'slipstream_internal/slipstream_hq/26/CLG-MAXFLOW': 815.0, 
         'slipstream_internal/slipstream_hq/31/CLG-MAXFLOW': 1214.0, 
         'slipstream_internal/slipstream_hq/34/CLG-MAXFLOW': 735.0,  
         'slipstream_internal/slipstream_hq/36/CLG-MAXFLOW': 3000.0, 
         'slipstream_internal/slipstream_hq/37/CLG-MAXFLOW': 275.0,  
         'slipstream_internal/slipstream_hq/38/CLG-MAXFLOW': 1690.0, 
         'slipstream_internal/slipstream_hq/39/CLG-MAXFLOW': 270.0}

我正在尝试遍历键和值,显然这失败了:

for key, value in data.items():
    print(key, value) 

失败:

AttributeError: 'list' object has no attribute 'items'

3 个答案:

答案 0 :(得分:0)

如果您的数据是一个只有两个元素的列表,而最后一个是空字典,那么简单的解决方案:

my_dict = data[0]

可靠的解决方案:

my_dict = {}
# iterate over your data
for entry in data:
    # iterate over keys in the dict
    for key in entry:
        my_dict[key] = entry[key]

答案 1 :(得分:0)

不依赖第一个索引,将列表中任意数量的字典拼合为一个字典:

flatten = {}
for n in data:
    flatten.update(n)

在创建这个扁平化的字典后,你下面的代码就可以正常工作了:

for key, value in flatten.items():
    print(key, value)

答案 2 :(得分:0)

正如@Ibrahim Berber 在评论中所说的,一个简单的解决方案就是采用 data = data[0]。或者,您可以保留它,然后按照@Leonardo Stefan 的建议使用 data[0] 访问您想要的字典,这将是我的首选方法。

因此,您的代码可以简单地更改为:

for key, value in data[0].items():
    print(key, value) 
相关问题