更改字典中键的名称


Answers:


715

只需2个步骤即可轻松完成:

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

或第一步

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
如果密钥不存在,这将以任何一种方式引发dict[new_value] = dict.pop(old_value, some_default_value)
KeyError

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 2010年

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'对象没有属性'replace'”
user1318135 '16

2
user1318125,我建议尝试复制粘贴。这在python控制台中对我有用(.replace在用作键的字符串上执行)
north.mister16.7.27

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()}
Erich

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'}


0

您可以将相同的值与许多键相关联,或者只删除一个键并重新添加具有相同值的新键。

例如,如果您有键->值:

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

没有理由您无法添加purple->2或删除red->1并添加orange->1



-3

我还没有看到这个确切的答案:

dict['key'] = value

您甚至可以对对象属性执行此操作。通过执行以下操作使它们成为字典:

dict = vars(obj)

然后,您可以像字典一样操作对象属性:

dict['attribute'] = value

1
我没有看到这与问题有什么关系;你能详细说明一下吗?
apraetor
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.