Преобразование словаря в список
Пример:
something = {
"1": {
"2": {
"3": {
"4": {},
"5": {},
"7": {},
},
"8": {
"9": {},
"10": {}
},
"11": {
"12": {
"13": {
"14": {
"15": {
"16": {
"17": {
"18": {}
}
}
}
}
}
}
}
}
}
}
Я пытаюсь преобразовать этот словарь в список таких элементов:
['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18']
Какой метод использовать?
Я уже пробовал something.items(), но я вернулся:
[('1', {'2': {'11': {'12': {'13': {'14': {'15': {'16': {'17': {'18': {}}}}}}}}, '8': {'9': {}, '10': {}}, '3': {'5': {}, '4': {}, '7': {}}}})]
Это мой первый пост, здесь, поэтому, если я сделал что-то неправильно, сообщите мне.
Спасибо и извините за странный пост.
Ответы
Ответ 1
Вам нужно будет использовать функцию, чтобы сгладить структуру:
def flatten(d):
for key, value in d.iteritems():
yield key
for sub in flatten(value):
yield sub
(.iteritems()
следует заменить на .items()
, если вы используете Python 3).
В python 3.3 и новее вы также можете использовать новый синтаксис yield from
:
def flatten(d):
for key, value in d.items():
yield key
yield from flatten(value)
Это будет рекурсивно выдавать все ключи. Чтобы включить это в список, используйте:
list(flatten(elements))
Поскольку словари Python неупорядочены, порядок возвращаемых ключей не сортируется. Вам нужно будет явно отсортировать результат, если вы хотите, чтобы ваши ключи имели определенный порядок.
Ответ 2
something = {'1': {'2': {'11': {'12': {'13': {'14': {'15': {'16': {'17': {'18': {}}}}}}}}, '3': {'4': {}, '5': {}, '7': {}}, '8': {'10': {}, '9': {}}}}}
a = []
def flatten(d,a):
for k,v in d.items():
a.append(k)
flatten(v, a)
flatten(something, a)
# a == ['1', '2', '11', '12', '13', '14', '15', '16', '17', '18', '8', '9', '10', '3', '5', '4', '7']"