【问题标题】:How to convert the following list of lists into list of dictionaries in Python如何将以下列表列表转换为 Python 中的字典列表
【发布时间】:2015-04-24 02:28:44
【问题描述】:

我有以下列表。

[["172.27.219.11", "First_Host", 13L, Decimal("44.8276")]
 ["172.27.219.11", "Second_Host", 16L, Decimal("55.1724")]
 ["172.27.241.210", "Second_Host", 19L, Decimal("100.0000")]
 ["52.11.201.64", "First_Host", 30L, Decimal("3.9164")]
 ["52.11.201.64", "Second_Host", 736L, Decimal("96.0836")]]

我必须按 ip_addresses 对它们进行分组。因此,例如对于第一个 ip_address 172.27.219.11 ,我必须将 First_HostSecond_Host 及其各自的十进制值分组为 traffic 。如果 IP 地址不重复,则只需添加即可。所以基本上在完成上述示例之后,我应该得到它。

[
    {
        "ip" : "172.27.219.11",
        "value": [
                    {
                        "name" : "First_Host",
                        "traffic" : 44.8276,
                    },
                    {
                        "name": "Second_Host",
                        "traffic": 55.1724,
                    }
                ]
        "ip" : "172.27.241.210"
        "value": [
                    {
                        "name": "Second_Host",
                        "traffic": 100 ,
                    }

               ]
        "ip": "52.11.201.64"
        "value": [
                    {
                        "name": "Second_Host",
                        "traffic": 3.9164,
                    },
                    {
                        "name": "First_Host",
                        "traffic": 96.0836,
                    }

               ]

    }
]

我需要帮助来制定上述格式的回复。

【问题讨论】:

  • 在您的示例输出中有一个字典,其中包含相同键的多个实例(ipvalue)。那是不可能的。同样在这里,我们希望看到您到目前为止所做的尝试。
  • 好的,那么有没有更好的方法来构造它而不是字典以获得我想要的东西。
  • 这取决于你想对数据做什么以及你想如何访问它。如果你想通过 IP 访问数据集,你应该使用 IP 作为键,数据集作为值。将两者都放入 ipvalue 字段会使访问数据变得复杂。

标签: python python-2.7 dictionary data-structures


【解决方案1】:
raw_data = [["172.27.219.11", "First_Host", 13L, Decimal("44.8276")],
 ["172.27.219.11", "Second_Host", 16L, Decimal("55.1724")],
 ["172.27.241.210", "Second_Host", 19L, Decimal("100.0000")],
 ["52.11.201.64", "First_Host", 30L, Decimal("3.9164")],
 ["52.11.201.64", "Second_Host", 736L, Decimal("96.0836")]]



final = [{'ip':j} for j in list(set([i[0] for i in raw_data]))]

for i in raw_data:
    for j in final:
        if i[0]== j['ip']:
            if j.has_key('value'):
                j['value'].append({'name':i[1],'traffic':float(i[3])})
            else:
                j['value'] = []
                j['value'].append({'name':i[1],'traffic':float(i[3])})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 2015-07-23
    • 2019-02-10
    • 2011-11-18
    • 2022-08-16
    • 2013-06-07
    相关资源
    最近更新 更多