python - 如何在指定位置插入键值对到字典中?

标签 python dictionary yaml

如何在从 YAML 文档加载的 Python 字典中的指定位置插入键值对?

例如,如果字典是:

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}

我想插入元素 'Phone':'1234' 例如,之前 '年龄'之后 '姓名'。我将要处理的实际字典非常大(已解析的 YAML 文件),因此删除和重新插入可能有点麻烦(我真的不知道)。

如果给我一种插入到 OrderedDict 中指定位置的方法,那也可以。

最佳答案

在 python < 3.7(或 cpython < 3.6)上,您无法控制标准字典中对的顺序。

如果您打算经常执行任意插入,我的建议是使用列表来存储键,并使用字典来存储值。

mykeys = ['Name', 'Age', 'Class']
mydict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'} # order doesn't matter

k, v = 'Phone', '123-456-7890'

mykeys.insert(mykeys.index('Name')+1, k)
mydict[k] = v

for k in mykeys:
    print(f'{k} => {mydict[k]}')

# Name => Zara
# Phone => 123-456-7890
# Age => 7
# Class => First

如果您计划初始化一个内容不太可能改变的排序字典,您可以使用维护插入顺序的 collections.OrderedDict 结构。

from collections import OrderedDict

data = [('Name', 'Zara'), ('Phone', '1234'), ('Age', 7), ('Class', 'First')] 
odict = OrderedDict(data)
odict
# OrderedDict([('Name', 'Zara'),
#              ('Phone', '1234'),
#              ('Age', 7),
#              ('Class', 'First')])

请注意,OrderedDict 不支持在任意位置插入(它只记住键插入字典的顺序)。

关于python - 如何在指定位置插入键值对到字典中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44390818/

相关文章:

python - 意外标记 `(' python 脚本附近的语法错误

python - 使用 selenium 的 findElement 错误 Python

python - Django:从表单中保存外键

java - 对象问题。使用构造函数还是不使用构造函数?

python - 将变量 "by name"添加到本地命名空间

python - python中的多级字典

r - Rmarkdown 文档的字体

go - 如何将动态 YAML 解码为 Go 中字符串 -> 字符串 -> 结构的映射?

automation - Ansible 'no_log' 用于调试输出中的特定值,而不是整个模块

python - 为什么 SWIG 似乎会损坏成员类的内容?