заполнить многомерный список данными, предоставленными другим списком (Python3) - PullRequest
0 голосов
/ 04 декабря 2018

Как я могу заполнить список данными, предоставленными другим списком?

Например, у меня есть список с двумя записями:

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]

Ответы [ 3 ]

0 голосов
/ 04 декабря 2018

Ваши данные в идеальном формате для использования 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']]

Но вы можете легко продолжать манипулировать данными в виде таблицы с пандами

0 голосов
/ 04 декабря 2018

Если вы также хотите избавиться от столбца 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']]
0 голосов
/ 04 декабря 2018

Если вы хотите изменить списки на месте, вы можете использовать extended :

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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...