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

Python将3个列表转换为以列表名为键名的字典列表,python,python-3.x,Python,Python 3.x,我有3个列表,我想转换成一个字典列表。期望的输出是将列表的名称作为每个dict中的键 # 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"] inciden

我有3个列表,我想转换成一个字典列表。期望的输出是将列表的名称作为每个dict中的键

# 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)])

您可以使用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)

这个输出也将是相同的。

有许多不同的方法可以做到这一点,但下面是我要做的

result=[{'source\u ip\u address':源,
“目的地ip地址”:目的地,
“事件名称”:事件}
对于zip中的源、目标、事件(源ip地址、,
目的地ip地址,
事件(名称)]

你可以做你想做的任何事情,当然,这正是我首先想到的。所以我会很快解释它的意思。因此,zip基本上只是获取每个列表,并将它们转换为元素元组的一个iterable。这意味着第一个元素是
('172.30.1.1','172.31.1.1','credentialsharing')
。for循环遍历所有元素,并将它们分解为单独的位。因此,在第一次迭代中,
source='172.30.1.1'
dest='172.31.1.1'
,以及
incident='Credential Sharing'
。我认为很清楚字典是如何从一次迭代中构建出来的。for位于列表理解的内部,因此它贯穿所有元素,并使用每个字典生成一个列表。

如果列表中每个元素都有一个元素,您能否编写代码来创建其中一个字典?您可以编写代码并行地迭代多个列表吗?如果两者都能做到,那么困难到底是什么?当您试图编写代码来解决问题时发生了什么?您是否尝试了zip和extract?请注意,如果您使用zip,则需要确保所有3个列表的长度相同。否则,它将在zip中迭代n次,其中n是所有3个列表的最小长度。比如说,列表1有3个项目,列表2有2个项目,列表3有5个项目。然后,zip将只生成2个集合,而忽略其他集合,因为它无法获取下一个集合的值。