如何在保留字典顺序的同时重命名键(Python 3.7+)?

Fli*_*imm 6 python python-3.x

我有一本字典,具有以下值:

{"a": 1, "b": 2, "c": 3}
Run Code Online (Sandbox Code Playgroud)

我想将密钥重命名bB,而不会失去第二名。在Python 3.7及更高版本中,字典保留插入顺序,因此可以依赖键的顺序并且可能意味着一些东西。我正在寻找的最终结果是:

{"a": 1, "B": 2, "c": 3}
Run Code Online (Sandbox Code Playgroud)

显而易见的代码是运行:

>>> dictionary["B"] = dictionary.pop("b")
{'a': 1, 'c': 3, 'B': 2}
Run Code Online (Sandbox Code Playgroud)

但是,这不会按需要保留顺序。

小智 6

foo = {'c': 2, 'b': 4, 'J': 7}
foo = {key if key != 'b' else 'B': value for key, value in foo.items()}
foo
Out[7]: {'c': 2, 'B': 4, 'J': 7}
Run Code Online (Sandbox Code Playgroud)


Dan*_*ejo 3

d该解决方案就地修改字典。如果性能不是问题,您可以执行以下操作:

d = {"a": 1, "b": 2, "c": 3, "d": 4}
replacement = {"b": "B"}

for k, v in list(d.items()):
    d[replacement.get(k, k)] = d.pop(k)

print(d)
Run Code Online (Sandbox Code Playgroud)

输出:

{'a': 1, 'B': 2, 'c': 3, 'd': 4}
Run Code Online (Sandbox Code Playgroud)

请注意,上述解决方案适用于任意数量的要更换的钥匙。d.items()另请注意,您需要迭代(using )的副本list(d.items()),因为在修改字典的键时不应迭代字典。