Распарсить список со списками
Всем добрый день! Есть примерно такой список:
my_list = [
['Customer', 945030, 8474017318, 8966],
['Properties', 1999999, 40190503687123, 20095261],
['Scenario', 945030, 8556799367, 9054],
['Customer', 945030, 7715110841, 8163],
['Properties', 2000000, 42231762430928, 21115881],
['Scenario', 945030, 7769275332, 8221],
]
Нужно получить такие списки:
event_1 = [
['Customer', 945030, 8474017318, 8966],
['Properties', 1999999, 40190503687123, 20095261],
['Scenario', 945030, 8556799367, 9054],
]
event_2 = [
['Customer', 945030, 8474017318, 8966],
['Properties', 1999999, 40190503687123, 20095261],
['Scenario', 945030, 8556799367, 9054],
]
Немного поясню - количество методов ('Customer', 'Properties' etc) может отличаться от события к событию, поэтому срезом решить проблему не получается. Отсчитывать новый список нужно всегда от 'Customer'. Как можно проще всего это сделать?
Ответы (3 шт):
Автор решения: Alioshca Z
→ Ссылка
Попробуйте так:
my_list = [
['Customer', 945030, 8474017318, 8966],
['Properties', 1999999, 40190503687123, 20095261],
['Scenario', 945030, 8556799367, 9054],
['Customer', 111111, 7715110841, 8163],
['Properties', 2000000, 42231762430928, 21115881],
['Scenario', 945030, 7769275332, 8221],
['Customer', 2222222, 7715110841, 8163],
['Properties', 2000000, 42231762430928, 21115881],
['Scenario', 945030, 7769275332, 8221],
]
all_lists = [] #будет хранить все списки
for element in my_list:
if element[0] == 'Customer':
temp_list = []
all_lists.append(temp_list)
temp_list.append(element)
else:
temp_list.append(element)
print(all_lists)
Автор решения: CrazyElf
→ Ссылка
my_list = [
['Customer', 945030, 8474017318, 8966],
['Properties', 1999999, 40190503687123, 20095261],
['Scenario', 945030, 8556799367, 9054],
['Customer', 945030, 7715110841, 8163],
['Properties', 2000000, 42231762430928, 21115881],
['Scenario', 945030, 7769275332, 8221],
]
event_list = []
for l in my_list:
if l[0] == 'Customer':
event = []
event_list.append(event)
event.append(l)
for e in event_list:
print(e)
Результат:
[['Customer', 945030, 8474017318, 8966], ['Properties', 1999999, 40190503687123, 20095261], ['Scenario', 945030, 8556799367, 9054]]
[['Customer', 945030, 7715110841, 8163], ['Properties', 2000000, 42231762430928, 21115881], ['Scenario', 945030, 7769275332, 8221]]
Автор решения: Wairua
→ Ссылка
def get_event(list_: list):
yield list_.pop(0)
while list_ and list_[0][0] != 'Customer':
yield list_.pop(0)
if __name__ == '__main__':
my_list = [
['Customer', 945030, 8474017318, 8966],
['Properties', 1999999, 40190503687123, 20095261],
['Scenario', 945030, 8556799367, 9054],
['Event_time', 456465, 4565456, 45555],
['Customer', 945030, 7715110841, 8163],
['Properties', 2000000, 42231762430928, 21115881],
['Scenario', 945030, 7769275332, 8221],
]
res_list = []
while my_list:
res_list.append(list(get_event(my_list)))
print(res_list)
# [[['Customer', 945030, 8474017318, 8966], ['Properties', 1999999, 40190503687123, 20095261], ['Scenario', 945030, 8556799367, 9054], ['Event_time', 456465, 4565456, 45555]], [['Customer', 945030, 7715110841, 8163], ['Properties', 2000000, 42231762430928, 21115881], ['Scenario', 945030, 7769275332, 8221]]]