微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Python 3 中更新 OrderedDict 中的键值?

如何解决如何在 Python 3 中更新 OrderedDict 中的键值?

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

from collections import OrderedDict

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

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

print(d)

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

解决方法

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

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)])

正在排序的 dict,新元素是 foo 所在的位置。

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

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

print(d)

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

性能注意事项

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。