python - 如何在 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)])
被排序的字典,新元素在哪里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
在原地更改而不是制作副本。
推荐阅读
- python - Scrapy 不遵循给定的请求
- android - How to retrieve file path and file name from gallery image to be used for uploading to server?
- ruby-on-rails - `test/dummy/config/application (LoadError)` when using `rails console` in a Rails engine
- python - 如何在每次迭代中仅从一个类中抽取批次
- ios - 如何快速隐藏customView中的按钮
- angularjs - 在 .htaccess 中重定向 angularjs 路由
- file - 重命名文件夹中的文件时出错
- c - 如何在C中将一个Int分成两个字节?
- java - Java中的硬编码@PathVariable
- doxygen - Doxygen:在 .dox 文件中记录类