29

で始まります

OrderedDict([('a', 1), ('c', 3), ('b', 2)])

で終わる可能性はありますか

OrderedDict([('a', 1), ('__C__', 3), ('b', 2)])

'__C__'アイテムが注文を維持する前後'b'にあることを確認しますか?'a'

4

2 に答える 2

25

あなたは試すことができます:

>>> d = OrderedDict([('a', 1), ('c', 3), ('b', 2)])
>>> d
OrderedDict([('a', 1), ('c', 3), ('b', 2)])
>>> d2 = OrderedDict([('__C__', v) if k == 'c' else (k, v) for k, v in d.items()])
>>> d2
OrderedDict([('a', 1), ('__C__', 3), ('b', 2)])
于 2012-08-27T23:29:06.757 に答える
10

現在のディクショナリオブジェクトを変更する場合:

def change_key(self, old, new):
    for _ in range(len(self)):
        k, v = self.popitem(False)
        self[new if old == k else k] = v

OrderedDictこれは、 (その長さを使用して)全体を反復処理し、最初の項目を(に渡すFalseことによって.popitem():このメソッドのデフォルトは最後の項目をポップすることです)kおよびv(それぞれキーを表す)にポップすることによって機能します。次に、このキーと値のペア、または元の値を持つ新しいキーをの最後に挿入しますOrderedDict

dictのサイズ全体に対してこのロジックを繰り返すことにより、dictを効果的に完全に回転させ、元の順序を再現します。

于 2013-07-19T13:14:42.573 に答える