10

例:

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': {}}}})]

ここに投稿するのは初めてなので、何か間違っていたら教えてください。

変な投稿ありがとうございます。

4

2 に答える 2

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構文も使用できます。

def flatten(d):
    for key, value in d.items():
        yield key
        yield from flatten(value)

これにより、すべてのキーが再帰的に生成されます。それをリストにするには、次を使用します。

list(flatten(elements))

Python 辞書は順不同であるため、返されるキーの順序はソートされません。キーに特定の順序を持​​たせたい場合は、結果を明示的にソートする必要があります。

于 2012-11-20T12:45:40.910 に答える
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']"
于 2012-11-20T12:45:19.143 に答える