首页 > 解决方案 > 将带有嵌套字典的列表转换为字典

问题描述

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

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'

标签: python

解决方案


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

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]

推荐阅读