繁体   English   中英

Python将3个列表转换为以列表名称作为键名的字典列表

[英]Python convert 3 lists to list of dictionaries with list name as key name

我有 3 个列表,我想将它们转换为字典列表。 所需的输出是将列表名称作为每个字典中的键。

# 3 lists
source_ip_address = ["172.30.1.1","123.123.1.1","180.104.1.1"]
destination_ip_address = ["172.31.1.1","172.31.1.1","192.168.1.1"]
incident_name = ["Credential Sharing","Remote IP","OTP Failures"]


# desired output
[
    {
    'source_ip_address': '172.30.1.1', 
    'destination_ip_address': '172.31.1.1',
    'incident_name': 'Credential Sharing'
    },
    {
    'source_ip_address': '123.123.1.1', 
    'destination_ip_address': '172.31.1.1',
    'incident_name': 'Remote IP'
    },
    {
    'source_ip_address': '180.104.1.1', 
    'destination_ip_address': '192.168.1.1',
    'incident_name': 'OTP Failures'
    }
]

是这样还是您正在寻找某种自动化来提取变量的别名?

source_ip_address = ["172.30.1.1","123.123.1.1","180.104.1.1"]
destination_ip_address = ["172.31.1.1","172.31.1.1","192.168.1.1"]
incident_name = ["Credential Sharing","Remote IP","OTP Failures"]


print([{'source_ip_address':x, 'destination_ip_address':y, 'incident_name':z} for x,y,z in zip(source_ip_address, destination_ip_address, incident_name)])

有很多不同的方法可以做到这一点,但这是我要做的。

result = [{'source_ip_address': source,
           'destination_ip_address': dest,
           'incident_name': incident}
           for source, dest, incident in zip(source_ip_address,
                                             destination_ip_address,
                                             incident_name)]

你可以做任何你想要的间距,当然,这只是我首先想到的。 所以我会很快解释它的意思。 因此 zip 基本上只是获取每个列表并将它们转换为元素元组的可迭代对象。 这意味着第一个元素是('172.30.1.1','172.31.1.1','Credential Sharing') for 循环遍历所有元素并将它们分解为单独的位。 因此,在第一次迭代中, source='172.30.1.1'dest='172.31.1.1'dest='172.31.1.1' incident='Credential Sharing' 我认为很清楚字典是如何从一次迭代中构建的。 for 位于列表推导式中,因此它遍历所有元素并生成包含每个字典的列表。

您可以使用 zip 进行列表理解或简单的 for 循环。

source_ip_address = ["172.30.1.1","123.123.1.1","180.104.1.1"]
destination_ip_address = ["172.31.1.1","172.31.1.1","192.168.1.1"]
incident_name = ["Credential Sharing","Remote IP","OTP Failures"]

ip_list = []
for a,b,c in zip(source_ip_address,destination_ip_address,incident_name):
    ip_list.append({'source_ip_address':a,
                          'destination_ip_address': b,
                          'incident_name': c})

print (ip_list)

输出将是:

[{'source_ip_address': '172.30.1.1', 'destination_ip_address': '172.31.1.1', 'incident_name': 'Credential Sharing'}, {'source_ip_address': '123.123.1.1', 'destination_ip_address': '172.31.1.1', 'incident_name': 'Remote IP'}, {'source_ip_address': '180.104.1.1', 'destination_ip_address': '192.168.1.1', 'incident_name': 'OTP Failures'}]

以防万一您不熟悉 zip 并希望使用常规迭代,您也可以执行类似的操作。

n = len(source_ip_address)
ip_list = []

for i in range(n):
    ip_list.append({'source_ip_address':source_ip_address[i],
                          'destination_ip_address': destination_ip_address[i],
                          'incident_name': incident_name[i]})

print (ip_list)

这个的输出也将是相同的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM