#python #python-3.x #list-comprehension
#python #python-3.x #понимание списка
Вопрос:
a = []
b = {}
for list1 in tasks:
for dict2 in list1:
b.update(dict2)
a.append(b)
Как я могу написать этот код как понимание списка?
Я пробовал это, но это не сработало:
a = [ [ b.update(dict2) for dict2 in list1 ] for list1 in tasks ]
мой json:
tasks = [[{'tuition_eea_amount': '2083', 'tuition_eea_currency': 'EUR', 'tuition_eea_unit': 'year'},
{'tuition_international_amount': '16200', 'tuition_international_currency': 'EUR', 'tuition_international_unit': 'year'}],
[{'tuition_eea_amount': '2083', 'tuition_eea_currency': 'EUR', 'tuition_eea_unit': 'year'},
{'tuition_international_amount': '16200', 'tuition_international_currency': 'EUR', 'tuition_international_unit': 'year'}]]
Я хочу преобразовать его в:
a = [[{'tuition_eea_amount': '2083', 'tuition_eea_currency': 'EUR', 'tuition_eea_unit': 'year', 'tuition_international_amount': '16200', 'tuition_international_currency': 'EUR', 'tuition_international_unit': 'year'},
{'tuition_eea_amount': '2083', 'tuition_eea_currency': 'EUR', 'tuition_eea_unit': 'year', 'tuition_international_amount': '16200', 'tuition_international_currency': 'EUR', 'tuition_international_unit': 'year'}]]
Должен быть один список с двумя словарями внутри. Но теперь это два списка с двумя словарями внутри каждого из них.
Комментарии:
1. Вы уверены, что это то, что вы хотите? Ваш первый фрагмент, похоже, делает
a = [b, b, ... b]
2. @quamrana мой первый фрагмент работает и возвращает мне список, который я хочу.
3. Это происходит потому, что оба ваших списка
tasks
имеют одинаковые dicts. Попробуйте использовать разные данные, и вы увидите, что конечный результат остается тем же4. @Tomerikoo, спасибо за разъяснения. Я этого не видел
Ответ №1:
Похоже, вы хотите создать объединенный dict из всех dict в каждом списке tasks
. Для того, что вы можете сделать:
a = [{k: v for dict2 in list1 for k, v in dict2.items()} for list1 in tasks]
В случае повторяющихся ключей между диктами это сохранит последний встреченный.
Используемый здесь dict-comp в основном эквивалентен использованию update
в цикле. Он перебирает все dicts и для каждого обновляет новый dict со всеми key: value
парами. Тогда te list-comp просто делает это для всех вложенных списков tasks
.
Комментарии:
1. Приятно! Он выполняет свою работу! Я не знал, что мы можем писать несколько циклов for внутри одного списка или dict.