辞書のキーの名前を変更する際に、その値を新しい名前に再割り当てしたり、古い名前のキーを削除したりせずに、辞書のキー/値を反復処理せずに、辞書のキーの名前を変更する方法はありますか?
の場合にはOrderedDict
キーの位置を維持しながら同じ操作を行います。
ベストアンサー1
通常の辞書の場合は、次を使用できます。
mydict[k_new] = mydict.pop(k_old)
これにより、アイテムが辞書の末尾に移動します。ただし、アイテムk_new
がすでに存在する場合は、その場で値が上書きされます。
Python 3.7 以降の dict で順序を保持したい場合は、完全に新しいインスタンスを再構築するのが最も簡単です。たとえば、キーの名前を次2
のように変更します'two'
。
>>> d = {0:0, 1:1, 2:2, 3:3}
>>> {"two" if k == 2 else k:v for k,v in d.items()}
{0: 0, 1: 1, 'two': 2, 3: 3}
の場合も同様です。OrderedDict
dict 内包構文は使用できませんが、ジェネレータ式を使用できます。
OrderedDict((k_new if k == k_old else k, v) for k, v in od.items())