2

私は次のような単純な辞書を反転しようとしています:

{'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4}

私はこの関数を使用しています:

def invert(d):
    return dict([(x,y) for y,x in d.iteritems()])

辞書を逆にすると、すべてうまくいきます。ただし、2回反転すると、次のようになります。

{'a': 1, 'c': 3, 'b': 2, 'd': 4}

これは私が始めた辞書と同じ順序ではありません。反転機能に問題はありますか?申し訳ありませんが、Pythonは初めてですが、助けてくれてありがとう!

4

3 に答える 3

3

そうです、辞書はPythonで順序付けされていません

別の答えから答えてください:

CPython 実装の詳細: キーと値は任意の順序でリストされます。これはランダムではなく、Python 実装によって異なり、辞書の挿入と削除の履歴に依存します。

ドキュメントから:

ディクショナリは、キーが (1 つのディクショナリ内で) 一意であるという要件を備えた、キーと値のペアの順序付けられていないセットと考えるのが最善です。中かっこのペアは、空の辞書を作成します: {}。キー:値ペアのコンマ区切りリストを中括弧内に配置すると、最初のキー:値ペアがディクショナリに追加されます。これは、辞書が出力に書き込まれる方法でもあります。

于 2012-12-26T17:41:50.587 に答える
2

Python 辞書は、設計上ソートされていません。

collections.OrderedDictこの動作が本当に必要な場合は、代わりに使用できます。

于 2012-12-26T17:42:38.140 に答える
2

このコードを実行してみてください:

d = {
    'a' : 1, 'b' : 2, 
    'c' : 3, 'd' : 4
}

def invert(d):
    return dict([(x,y) for y,x in d.iteritems()])

print d

d = invert(d)

print d

d = invert(d)

print d

これは出力です:

{'a': 1, 'c': 3, 'b': 2, 'd': 4}
{1: 'a', 2: 'b', 3: 'c', 4: 'd'}
{'a': 1, 'c': 3, 'b': 2, 'd': 4}

ご覧のとおり、技術的には同じ辞書ですが、宣言すると順序付けされていません。

于 2012-12-26T17:45:16.073 に答える