首页 > 解决方案 > 如何在 Python 3 中更新 OrderedDict 中的键值?

问题描述

这是一个最小的可重现示例:

from collections import OrderedDict

d = OrderedDict([('foo', 123),
                 ('bar', 456)])

所以我想检查是否有一个food,如果有那么我想将它重写为一个新的硬编码键的列表的单个值:

print(d)

ordereddict([('bar', 456), ('newCoolHardcodedKey', [ordereddict([('foo', 123)])])])

标签: pythonpython-3.xordereddict

解决方案


您可以使用生成表达式(如列表推导式,但返回迭代器而不是将临时列表存储在内存中)来执行此操作:

d = OrderedDict(
    (
        ("newCoolHardcodedKey", OrderedDict([item])) if item[0] == "foo" else item
        for item in d.items()
    )
)

print(d)

OrderedDict([('newCoolHardcodedKey', OrderedDict([('foo', 123)])), ('bar', 456)])

被排序的字典,新元素在哪里foo

如果您需要新元素到最后,可能最简单的方法是测试是否d["foo"]存在,如果存在,则将新的有序 dict 及其硬编码键附加并删除原始条目foo

if "foo" in d:
    d["newCoolHardcodedKey"] = OrderedDict([("foo", d["foo"])])
    del d["foo"]

print(d)

OrderedDict([('bar', 456), ('newCoolHardcodedKey', OrderedDict([('foo', 123)]))])

性能注意事项

如果d在您的实际应用程序中很大,则第二种解决方案要好得多,因为它会d在原地更改而不是制作副本。


推荐阅读