gpt4 book ai didi

python - 根据一个字典的结构(骨架)和另一个字典的相应值创建嵌套字典

转载 作者:太空宇宙 更新时间:2023-11-04 00:21:01 25 4
gpt4 key购买 nike

假设我有一个名为 dict1 的字典,它具有我想要的新字典的骨架(顺序和嵌套深度)。例如:

dict1 = {
"Personnel": {
"Performance": ""
},
"Gaming": {
"Status": "",
"Bug Status": ""
},
"Compatible": {
"Minimum": "",
"Integrity": "",
"Scaling": ""
},
"Comparison": {
"Difference": {
"DirectX": ""
},
"Vendor": {
"Intel": "",
"Xiaomi": ""
}
}
}

我有另一个字典作为 dict2 它具有与上面 dict1 字典中的键对应的值以及一些额外的键值对:

dict2 = {
"Personnel": {
"Performance": "10.5",
"Maximum": "50.5"
},
"Gaming": {
"Status": "Cool",
"Bug Status": "None",
"Green Status": "Black"
},
"Compatible": {
"Minimum": "5",
"Integrity": "Yes",
"Scaling": "No"
},
"Comparison": {
"Difference": {
"DirectX": "50",
"Android": "70"
},
"Vendor": {
"Xiaomi": "40"
}
},
"Another property": {
"Testinfo": "TestTest",
"Important": {
"Wow": "MuchDoge"
}
}
}

我想创建一个新字典,它具有 dict1 的骨架和从 dict2 获取的键的相应值。

注意:我想跳过不属于 dict1 的键值对。例如:我的新词典中不需要 'Green Status': 'Black'

下面是我试过的代码:

def update(dict1 : dict, dict2: dict):  
new_data = {}
for k, v in dict1.items():
if isinstance(v, dict):
v = update(v, dict(dict2.keys()))
if v not in dict2.keys():
new_data[k] = v
return new_data

但我完全遗漏了一些东西。

最佳答案

您可以使用嵌套字典理解 来实现这一点。迭代 dict1.items() 以获得 (key, value) 对的类型。再次迭代来自先前操作的 value 字典,以获取嵌套的新字典所需的键。然后,从 dict2 中获取对应的键值。例如:

new_dict = {k: {v_k: dict2[k][v_k] for v_k in v_dict} for k, v_dict in dict1.items() }

如果 some_key 键不存在,使用 dict.get('some_key') 处理异常更好。因此,上述字典理解表达式将变为:

new_dict = {k: {v_k: dict2.get(k, {}).get(v_k) for v_k in v_dict} for k, v_dict in dict1.items() }

如果 dict1 中的任何键不存在于 dict2 中,这会将 None 存储为值。

对于您的示例数据,上面的代码将返回 new_dict 作为:

{
"Compatible": {
"Scaling": "No",
"Minimum": "5",
"Integrity": "Yes"
},
"Personnel": {
"Performance": "10.5"
},
"Gaming": {
"Status": "Cool",
"Bug Status": "None"
},
"Comparison": {
"Difference": {
"Android": "70",
"DirectX": "50"
},
"Vendor": {
"Xiaomi": "40"
}
}
}

关于python - 根据一个字典的结构(骨架)和另一个字典的相应值创建嵌套字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49116021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com