辞書のキーの名前を変更する


回答:


715

2つのステップで簡単に実行:

dictionary[new_key] = dictionary[old_key]
del dictionary[old_key]

または1ステップで:

dictionary[new_key] = dictionary.pop(old_key)

これ引き上げるKeyError場合はdictionary[old_key]定義されていません。これ削除されることに注意してくださいdictionary[old_key]

>>> dictionary = { 1: 'one', 2:'two', 3:'three' }
>>> dictionary['ONE'] = dictionary.pop(1)
>>> dictionary
{2: 'two', 3: 'three', 'ONE': 'one'}
>>> dictionary['ONE'] = dictionary.pop(1)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
KeyError: 1

59
これにより、キーが存在しない場合はどちらの方法でもKeyErrorが発生しますが、それdict[new_value] = dict.pop(old_value, some_default_value)を回避するために使用できます
Tobias Kienzler

2
これはCPython 3.6+ / PypyおよびPython 3.7+でのキーの位置にも影響することに注意してください。つまり、の位置はold_keyとは異なりnew_keyます。
norok2

63

すべてのキーを変更したい場合:

d = {'x':1, 'y':2, 'z':3}
d1 = {'x':'a', 'y':'b', 'z':'c'}

In [10]: dict((d1[key], value) for (key, value) in d.items())
Out[10]: {'a': 1, 'b': 2, 'c': 3}

単一のキーを変更する場合:上記の提案のいずれかを使用できます。


3
これは、既存の辞書を更新するのではなく、新しい辞書を作成します。これは重要ではないかもしれませんが、要求されたものではありません。
martineau

15
辞書の理解度と同じ答え:{ d1[key] : value for key, value in d.items() }
Morwenn

35

ポップンフレッシュ

>>>a = {1:2, 3:4}
>>>a[5] = a.pop(1)
>>>a
{3: 4, 5: 2}
>>> 

26

Python 2.7以降では、辞書内包表記を使用できます。これは、DictReaderを使用してCSVを読み取るときに遭遇した例です。ユーザーはすべての列名に「:」を付けていました

ori_dict = {'key1:' : 1, 'key2:' : 2, 'key3:' : 3}

キーの末尾の「:」を取り除くには:

corrected_dict = { k.replace(':', ''): v for k, v in ori_dict.items() }


「AttributeError: 'dict' object has no attribute 'replace'」
user1318135

2
user1318125、私はコピーして貼り付けることをお勧めします。これは私にとってはpythonコンソールで機能します(.replaceはキーとして使用される文字列に対して実行されています)
north.mister

7

キーは辞書が値を検索するために使用するものであるため、実際に変更することはできません。最も近い方法は、古いキーに関連付けられた値を保存し、それを削除してから、置換キーと保存された値を使用して新しいエントリを追加することです。他の回答のいくつかは、これを実現できるさまざまな方法を示しています。


5

複雑な辞書がある場合、それは辞書内に辞書またはリストがあることを意味します。

myDict = {1:"one",2:{3:"three",4:"four"}}
myDict[2][5] = myDict[2].pop(4)
print myDict

Output
{1: 'one', 2: {3: 'three', 5: 'four'}}

4

これを行う直接的な方法はありませんが、削除してから割り当てることができます

d = {1:2,3:4}

d[newKey] = d[1]
del d[1]

または大量のキー変更を行います:

d = dict((changeKey(k), v) for k, v in d.items())

2
d = { changeKey(k): v for k, v in d.items()}
エーリヒ

4

辞書のすべてのキーを変換するには

これがあなたの辞書だとしましょう:

>>> sample = {'person-id': '3', 'person-name': 'Bob'}

サンプルディクショナリキーですべてのダッシュをアンダースコアに変換するには:

>>> sample = {key.replace('-', '_'): sample.pop(key) for key in sample.keys()}
>>> sample
>>> {'person_id': '3', 'person_name': 'Bob'}

3
d = {1:2,3:4}

キーをリスト要素p = ['a'、 'b']に変更するとします。次のコードが行います:

d=dict(zip(p,list(d.values()))) 

そして私たちは

{'a': 2, 'b': 4}

0

同じ値を多くのキーに関連付けることも、キーを削除して同じ値の新しいキーを再度追加することもできます。

たとえば、keys-> valuesがある場合:

red->1
blue->2
green->4

追加purple->2、削除red->1、追加できない理由はありませんorange->1


0

すべてのキーを一度に変更する場合。ここで私はキーをステミングしています。

a = {'making' : 1, 'jumping' : 2, 'climbing' : 1, 'running' : 2}
b = {ps.stem(w) : a[w] for w in a.keys()}
print(b)
>>> {'climb': 1, 'jump': 2, 'make': 1, 'run': 2} #output

-3

私はこの正確な答えを見ていません:

dict['key'] = value

オブジェクトの属性に対してもこれを行うことができます。次のようにして、それらを辞書にします。

dict = vars(obj)

次に、辞書のようにオブジェクト属性を操作できます。

dict['attribute'] = value

1
これが質問にどのように関連しているかはわかりません。詳しく説明してもらえますか?
前任者2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.