Я пытаюсь преобразовать это в понимание списка.
Текущий код
some_list = [[{"apple":"red"}, {"orange":"orange"}, {"pineapple":"yellow"}, [{"box":"brown"}, {"table":"grey"}, {"seat":"green"}], {"grapes":"purple"}, {"cherry":"red"}]]
category_list = []
for item in some_list:
tag_list = []
for elem in item:
if isinstance(elem, list):
for x in elem:
tag_list.append(x)
else:
tag_list.append(elem)
category_list.append(tag_list)
category_list
Желаемый результат
[[{'apple': 'red'},
{'orange': 'orange'},
{'pineapple': 'yellow'},
{'box': 'brown'},
{'table': 'grey'},
{'seat': 'green'},
{'grapes': 'purple'},
{'cherry': 'red'}]]
Моя попытка
[[x for x in elem] if isinstance(elem, list) else elem for item in some_list for elem in item]
Полученные результаты
[{'apple': 'red'},
{'orange': 'orange'},
{'pineapple': 'yellow'},
[{'box': 'brown'}, {'table': 'grey'}, {'seat': 'green'}],
{'grapes': 'purple'},
{'cherry': 'red'}]
Но это просто возвращает меня к тому, с чего я начал.
Двумя целями проектирования понимания списков являются снижение сложности и повышение удобочитаемости. Вы, кажется, идете в противоположном направлении.
@Chris Извините, я только что обновил свои результаты, чтобы показать разницу.
@KlausD.Извините, мой вопрос не был «Какова цель разработки списков?» Опять же, мои искренние извинения, это было неясно, когда я написал: «Я пытаюсь преобразовать это в понимание списка».
вы хотите удалить третий '[' и первый ']'? нет? так что, может быть, что вы хотите сделать, не так ясно?!
@wotter Спасибо за ваш вопрос. Мне в основном нужно распаковать третий список и сохранить порядок. Если вы посмотрите на Desired vs Results, вы увидите, как все словари распаковываются и сохраняют порядок.
Попробуйте это понимание:
some_list = [[{"apple":"red"}, {"orange":"orange"}, {"pineapple":"yellow"}, [{"box":"brown"}, {"table":"grey"}, {"seat":"green"}], {"grapes":"purple"}, {"cherry":"red"}]]
categories = [x if type(x) == dict else y for x in some_list[0] for y in x]
print(categories)
# Prints
# [{'apple': 'red'}, {'orange': 'orange'}, {'pineapple': 'yellow'},
# {'box': 'brown'}, {'table': 'grey'}, {'seat': 'green'},
# {'grapes': 'purple'}, {'cherry': 'red'}]
Это добавляет элемент, если это словарь, в противном случае добавляет каждый элемент в элементе (который будет списком).
Примечание. На самом деле я новичок в понимании списка, поэтому дайте мне знать, если я допустил какие-либо ошибки!
«Но это просто возвращает меня к тому, с чего я начал» — чем отличаются ваш вклад и желаемый результат? Они кажутся идентичными. Редактировать: О, я вижу. Во входных данных есть третий вложенный внутренний список, содержащий
"box"
,"table"
и"seat"
. Это именно то, что было бы полезно явно указать в вашем вопросе. Сделайте так, чтобы нам было легко вам помочь. См. Как спросить.