示例:
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': {}}}})]
这是我第一次在这里发帖,所以如果我做错了请告诉我。
谢谢,对不起这个奇怪的帖子。
答案 0 :(得分:24)
您需要使用一个函数来展平您的结构:
def flatten(d):
for key, value in d.iteritems():
yield key
for sub in flatten(value):
yield sub
(如果您使用的是Python 3,则.iteritems()
应替换为.items()
。
在python 3.3及更新版本上,您还可以使用新的yield from
syntax:
def flatten(d):
for key, value in d.items():
yield key
yield from flatten(value)
这会以递归方式产生所有键。要将其转换为列表,请使用:
list(flatten(elements))
由于Python字典是无序的,因此返回的键的顺序不会被排序。如果您希望密钥具有特定的顺序,则必须明确对结果进行排序。
答案 1 :(得分:6)
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']"