Создавать подсписки из главного списка на основе первого элемента списка - PullRequest
0 голосов
/ 28 мая 2020

У меня есть следующий список:

master_list =[['Apple','Red','Fresh','CA'],['Banana','Yellow','Fresh','NY'],['Mandarin','Orange','Fresh','WA'],['Apple','Red','Fresh','NJ'],['Banana','Yellow','Fresh','TX'],
['Apple','Red','Old','CA'],['Mandarin','Orange','Fresh','CA'],['Pineapple''Yellow','Fresh','MI']]

Мне нужно l oop через приведенный выше список и создать отдельные списки на основе 0-го элемента каждого подсписка в master_list

Ожидаемый результат:

l_apple=[['Apple','Red','Fresh','CA'],['Apple','Red','Fresh','NJ'],['Apple','Red','Old','CA']]
l_banana=[['Banana','Yellow','Fresh','TX'],['Banana','Yellow','Fresh','NY']]
l_mandarin=[['Mandarin','Orange','Fresh','WA'],['Mandarin','Orange','Fresh','CA']]
l_pineapple=[['Pineapple''Yellow','Fresh','MI']]"

Я был бы очень признателен за любые предложения или советы по эффективному кодированию его в Python.

Обратите внимание: у нас нет фиксированного списка фрукты. Таким образом, количество списков, которые необходимо сгенерировать, может измениться в зависимости от уникальных значений фруктов (полученных из первого элемента списка во вложенном списке). Заранее спасибо за помощь

Ответы [ 2 ]

2 голосов
/ 28 мая 2020

Поскольку у вас есть динамическое c количество фруктов, вы не хотите давать каждому из них статическую переменную. Что-то вроде dict - лучший вариант:

>>> from collections import defaultdict
>>> fruit_dict = defaultdict(list)
>>> for fruit in master_list:
...     fruit_dict[fruit[0]].append(fruit)
...
>>> dict(fruit_dict)
{
    'Apple': [['Apple', 'Red', 'Fresh', 'CA'], ['Apple', 'Red', 'Fresh', 'NJ'], ['Apple', 'Red', 'Old', 'CA']], 
    'Banana': [['Banana', 'Yellow', 'Fresh', 'NY'], ['Banana', 'Yellow', 'Fresh', 'TX']], 
    'Mandarin': [['Mandarin', 'Orange', 'Fresh', 'WA'], ['Mandarin', 'Orange', 'Fresh', 'CA']], 
    'PineappleYellow': [['PineappleYellow', 'Fresh', 'MI']]
}
1 голос
/ 28 мая 2020

Как хорошо сказал Сэмвайз, для этого лучше использовать словарь. Но в случае, если вам действительно нужно создать эти переменные и , если вы находитесь в области модуля , вы можете добиться этого, выполнив следующие действия:

master_list =[['Apple','Red','Fresh','CA'],['Banana','Yellow','Fresh','NY'],['Mandarin','Orange','Fresh','WA'],['Apple','Red','Fresh','NJ'],['Banana','Yellow','Fresh','TX'], ['Apple','Red','Old','CA'],['Mandarin','Orange','Fresh','CA'],['Pineapple','Yellow','Fresh','MI']]

for list_ in master_list:
    name = f'l_{list_[0].lower()}'
    vars().setdefault(name, []).append(list_)

output

>>> l_apple
[['Apple', 'Red', 'Fresh', 'CA'], ['Apple', 'Red', 'Fresh', 'NJ'], ['Apple', 'Red', 'Old', 'CA']]
>>> l_pineapple
[['Pineapple', 'Yellow', 'Fresh', 'MI']]
>>> l_mandarin
[['Mandarin', 'Orange', 'Fresh', 'WA'], ['Mandarin', 'Orange', 'Fresh', 'CA']]
>>> l_banana
[['Banana', 'Yellow', 'Fresh', 'NY'], ['Banana', 'Yellow', 'Fresh', 'TX']]
...