Понимание вложенного списка, очистка одного списка во время итерации - PullRequest
1 голос
/ 26 февраля 2020

Как вы преобразуете код ниже в список понимания? Я запутался в том, как очистить один из списков во время итерации. Я видел, как это сделать раньше, но я не помню, как это называется. Не говоря уже о том, что вы называете очисткой списка во время итерации (если для него есть имя).

data = [{"meal":"tacos","numbers":["0","1","2","3","4","5"]},{"meal":"pizza","numbers":["0","1","2","3","4","5"]}]

node_01 = []
for i in data:
    node_02 = []
    for x in i["numbers"]:
        node_02.append({"meal":i["meal"], "number":x})
    node_01.append({"master_list":"ML", "new_data":node_02})

Вывод:

[{'master_list': 'ML',
  'new_data': [{'meal': 'tacos', 'number': '0'},
   {'meal': 'tacos', 'number': '1'},
   {'meal': 'tacos', 'number': '2'},
   {'meal': 'tacos', 'number': '3'},
   {'meal': 'tacos', 'number': '4'},
   {'meal': 'tacos', 'number': '5'}]},
 {'master_list': 'ML',
  'new_data': [{'meal': 'pizza', 'number': '0'},
   {'meal': 'pizza', 'number': '1'},
   {'meal': 'pizza', 'number': '2'},
   {'meal': 'pizza', 'number': '3'},
   {'meal': 'pizza', 'number': '4'},
   {'meal': 'pizza', 'number': '5'}]}]

Ответы [ 2 ]

2 голосов
/ 26 февраля 2020
[  {"meal":i["meal"], "numbers":j } for j in i["numbers"]  for i in data]

Объяснение: Чтобы написать начало списка, нажмите al oop, включенный в список

Step1. [ for i in data] На этом шаге будет создан итератор для существующего списка. Теперь, если вы видите для каждой итерации, значение i["numbers"] будет новым списком.

Step2. [{"meal":i["meal"], "new_data":i["numbers"]} for i in data]

Разобрать значение i, чтобы создать из него новый словарь. Но это немного сложнее, потому что у вас есть список номеров. до этого шага вы будете получать те же данные, что и ваш исходный

Шаг 3: [ {"meal":i["meal"], "numbers":j } for j in i["numbers"] for i in data] Поскольку мы знаем, что сам i ["numbers"] является списком, мы можем затем выполнить итерацию этого списка и создать новый итератор только для списка чисел

Не забывайте понимать, что понимание списка начинается справа, которые являются итераторами, а слева - это значение, которое является окончательным добавленным значением в списке. Всякий раз, когда вы начинаете писать, понимание списка начинается справа.

Надеюсь, мое объяснение поможет.

2 голосов
/ 26 февраля 2020

Одна возможность:

data = [{"meal":"tacos","numbers":["0","1","2","3","4","5"]},{"meal":"pizza","numbers":["0","1","2","3","4","5"]}]
result = [{'master_list':'ML', 'new_data':[{"meal":i["meal"], "number":x} for x in i['numbers']]} for i in data]
...