代码之家  ›  专栏  ›  技术社区  ›  sectechguy

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

  •  0
  • sectechguy  · 技术社区  · 5 年前

    # 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'
        }
    ]
    
    1 回复  |  直到 5 年前
        1
  •  3
  •   tgrandje    5 年前

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

    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)])
    
        2
  •  2
  •   Bryce    5 年前

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

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

    ('172.30.1.1','172.31.1.1','Credential Sharing') . for循环遍历所有元素并将它们分解为单独的位。所以在第一次迭代中, source='172.30.1.1' dest='172.31.1.1' ,和 incident='Credential Sharing' . 我认为很清楚字典是如何从一次迭代中构建出来的。for位于列表理解的内部,因此它遍历所有元素并生成包含每个字典的列表。

        3
  •  1
  •   Joe Ferndz    5 年前

    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)