【问题标题】:fill a multidimensional List with the data provided by another List (Python3)用另一个列表提供的数据填充多维列表(Python3)
【发布时间】:2019-05-06 04:03:22
【问题描述】:

如何用另一个 List 提供的数据填充 List?

例如,我有一个包含两个条目的列表:

list1=[['printer1', '172.1.1.1', '12345678', 'Xerox', 'Xerox Phaser ', 'Team@Departemnt'],['printer2', '172.1.1.2', '12345678', 'Xerox', 'Xerox Ricoh ', 'Team1@Departemnt1']]

我想修改一些条目例如我想拆分部门条目并在列表中添加两列,并带有一个循环

cache= list1[0][5].split('@')
list1[0][6]= cache[0]
list1[0][7]= cache[1]

【问题讨论】:

    标签: python arrays python-3.x list for-loop


    【解决方案1】:

    您的数据是使用pandas的理想格式:
    不过,此方法不使用任何循环。

    import pandas as pd
    
    df = pd.DataFrame(list1, columns=['name', 'ip', 'number', 'manufacturer', 'device', 'dept'])
    print(df)
           name         ip    number manufacturer         device               dept
    0  printer1  172.1.1.1  12345678        Xerox  Xerox Phaser     Team@Departemnt
    1  printer2  172.1.1.2  12345678        Xerox   Xerox Ricoh   Team1@Departemnt1
    

    然后你可以在@上拆分:

    df['team'], df['dept'] = df['dept'].str.split('@', 1).str
    print(df)
           name         ip    number manufacturer         device         dept   team
    0  printer1  172.1.1.1  12345678        Xerox  Xerox Phaser    Departemnt   Team
    1  printer2  172.1.1.2  12345678        Xerox   Xerox Ricoh   Departemnt1  Team1
    

    如果您需要将其作为列表返回,您可以使用:

    df.values.tolist()
    [['printer1', '172.1.1.1', '12345678', 'Xerox', 'Xerox Phaser ', 'Departemnt', 'Team'], 
     ['printer2', '172.1.1.2', '12345678', 'Xerox', 'Xerox Ricoh ', 'Departemnt1', 'Team1']]
    

    但是你可以很容易地使用 pandas 将数据作为表格进行操作

    【讨论】:

    • 非常感谢,这正是我正在寻找的内容
    【解决方案2】:

    如果您想就地修改列表,可以使用extend

    list1 = [['printer1', '172.1.1.1', '12345678', 'Xerox', 'Xerox Phaser ', 'Team@Departemnt'],
             ['printer2', '172.1.1.2', '12345678', 'Xerox', 'Xerox Ricoh ', 'Team1@Departemnt1']]
    
    
    for l in list1:
        l.extend(l[-1].split('@'))
    
    
    print(list1)
    

    输出

    [['printer1', '172.1.1.1', '12345678', 'Xerox', 'Xerox Phaser ', 'Team@Departemnt', 'Team', 'Departemnt'], ['printer2', '172.1.1.2', '12345678', 'Xerox', 'Xerox Ricoh ', 'Team1@Departemnt1', 'Team1', 'Departemnt1']]
    

    如果您想要一个新列表,也可以将拆分添加到列表中:

    result = [l + l[-1].split('@') for l in list1]
    

    【讨论】:

      【解决方案3】:

      如果您还想删除新列表中的 team@dep 列,可以使用以下方法:

      new_list = [l.extend(l.pop(-1).split('@')) or l for l in list1]
      
      >>> new_list
      [['printer1',
        '172.1.1.1',
        '12345678',
        'Xerox',
        'Xerox Phaser ',
        'Team',
        'Departemnt'],
       ['printer2',
        '172.1.1.2',
        '12345678',
        'Xerox',
        'Xerox Ricoh ',
        'Team1',
        'Departemnt1']]
      

      【讨论】:

        猜你喜欢
        • 2010-12-24
        • 2016-05-28
        • 2020-01-11
        • 1970-01-01
        • 2017-03-02
        • 1970-01-01
        • 2022-08-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多