按索引将键值插入嵌套字典列表中

3

有一个嵌套字典的列表:

k = [{'width_min': 0, 'width_max': 300, 'height_min': 0, 'height_max': 65535},
    {'width_min': 301, 'width_max': 600, 'height_min': 0, 'height_max': 65535},
    {'width_min': 601, 'width_max': 65535, 'height_min': 0, 'height_max': 65535}]

并且有一个关键映射:

keymap = {
    'width_min': 'minWidth',
    'width_max': 'maxWidth',
    'height_min': 'minHeight',
    'height_max': 'maxHeight',
}

尝试创建一个新的列表,其中包含与原列表相同的字典,但具有不同的键名:
new_data = []
for i, x in enumerate(k):
    for k, v in x.items():
        new_data.insert(i, {keymap[k]: v})
print('---> new_data:', new_data)

输出:

new_data: [{'maxHeight': 65535}, {'maxHeight': 65535}, {'maxHeight': 65535}, 
{'minHeight': 0}, {'maxWidth': 65535}, {'minWidth': 601}, {'minHeight': 0},   
{'maxWidth': 600}, {'minWidth': 301}, {'minHeight': 0}, {'maxWidth': 300},   
{'minWidth': 0}]

如何通过索引更新嵌套字典而不是创建新字典?期望的数组:

k = [{'minWidth': 0, 'maxWidth': 300, 'minHeight': 0, 'maxHeight': 65535},
    {'minWidth': 301, 'maxWidth': 600, 'minHeight': 0, 'maxHeight': 65535},
    {'minWidth': 601, 'maxWidth': 65535, 'minHeight': 0, 'maxHeight': 65535}]
1个回答

4
你可以遍历列表 k 并使用字典推导式从 keymap 中获取新的键名:
k = [{'width_min': 0, 'width_max': 300, 'height_min': 0, 'height_max': 65535},
{'width_min': 301, 'width_max': 600, 'height_min': 0, 'height_max': 65535},
{'width_min': 601, 'width_max': 65535, 'height_min': 0, 'height_max': 65535}]
keymap = {
'width_min': 'minWidth',
'width_max': 'maxWidth',
'height_min': 'minHeight',
'height_max': 'maxHeight',
}
k = [{keymap.get(a, a):b for a, b in i.items()} for i in k]

输出:

[{'minWidth': 0, 'maxHeight': 65535, 'minHeight': 0, 'maxWidth': 300}, {'minWidth': 301, 'maxHeight': 65535, 'minHeight': 0, 'maxWidth': 600}, {'minWidth': 601, 'maxHeight': 65535, 'minHeight': 0, 'maxWidth': 65535}]

对于非常谨慎的人,也许可以使用[{keymap.get(a, a).. - Ma0
我会避免使用 keymap.get,因为它可能会隐藏输入数据中的潜在错误。快速失败! - xtofl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接