2017-02-07 3 views
-3

私は、次のネストされた辞書があります。どのように入れ子になった辞書のpythonを並べ替えるには?

{'switch3': {'ip': '192.160.1.2', 'hostname': 'test-1'}, 
'switch2': {'ip': '192.160.1.8', 'hostname': 'test-1'}, 
'switch4': {'ip': '192.160.1.3', 'hostname': 'test-1'}, 
'switch1': {'ip': '192.160.1.4', 'hostname': 'test-1'}} 

を、私はスイッチでソートし、この取得したい:

{'switch1': {'ip': '192.160.1.4', 'hostname': 'test-1'} 
'switch2': {'ip': '192.160.1.8', 'hostname': 'test-1'}, 
'switch3': {'ip': '192.160.1.2', 'hostname': 'test-1'}, 
'switch4': {'ip': '192.160.1.3', 'hostname': 'test-1'}} 

を、これは可能ですか?

+1

辞書は並べ替えられていないため、**ソート**辞書はありません。 –

+0

ディクショナリは(CPython 3.6より前に)順序付けされておらず、 'sorted()'を適用してから 'OrderedDict'に渡します。 –

+1

' OrderedDict'はPython 3.6でも正しいコレクションです。実装に依存しないでください。 – Ryan

答えて

1

Pythonのdictsは順序付けられていないリストであることに注意してください。アイテムの順序を覚えているOrderedDictを使うことができます。

次のコードはdict(印刷のみ)をソートするようですが、実際にソートしていないので、OrderedDictを使用してください。

mydict = {'switch3': {'ip': '192.160.1.2', 'hostname': 'test-1'}, 
'switch2': {'ip': '192.160.1.8', 'hostname': 'test-1'}, 
'switch4': {'ip': '192.160.1.3', 'hostname': 'test-1'}, 
'switch1': {'ip': '192.160.1.4', 'hostname': 'test-1'}} 

sorted_x = sorted(mydict.items()) 
+0

ニース; 'key = lambda p:p [0]'はもっと短く、説明的です。 – Ryan

+0

@ Ryan 'operator.itemgetter'が高速です。とにかく、ここではどちらも必須ではありません、 'sorted()'キーなしで動作します!重複を参照してください –

+0

@ライアン、よく..短いです;) –

関連する問題