gpt4 book ai didi

在两个具有嵌套键的字典之间进行映射的 Pythonic 方法

转载 作者:太空宇宙 更新时间:2023-11-04 04:24:36 24 4
gpt4 key购买 nike

我有两种代表相同数据的字典。它们由两个不同的 channel 使用,因此它们的 key 不同。

例如:A型

{ 
"key1": "value1",
"key2": "value2",
"nestedKey1" : {
"key3" : "value3",
"key4" : "value4"
}
}

类型 B

{ 
"equiKey1": "value1",
"equiKey2": "value2",
"equinestedKey1.key3" : "value3",
"equinestedKey1.key4" : "value4"
}

我想将数据从类型 B 映射到类型 A。目前我正在创建它如下

{
"key1": typeBObj.get("equiKey1"),
.....
}

在 Python 中有更好更快的方法吗

最佳答案

首先,您需要一个字典,将 B 中的键映射到 A 中的键(或者键列表)。 (如果键遵循您问题中的模式或类似模式,则也可能生成此字典。)

B_to_A = { 
"equiKey1": ["key1"],
"equiKey2": ["key2"],
"equinestedKey1.key3" : ["nestedKey1", "key3"],
"equinestedKey1.key4" : ["nestedKey1", "key4"]
}

然后您可以定义一个函数来翻译这些键。

def map_B_to_A(d):
res = {}
for key, val in B.items():
r = res
*head, last = B_to_A[key]
for k in head:
r = res.setdefault(k, {})
r[last] = val
return res

print(map_B_to_A(B) == A) # True

或者更短一点,但可能不太清楚,使用 reduce:

def map_B_to_A(d):
res = {}
for key, val in B.items():
*head, last = B_to_A[key]
reduce(lambda d, k: d.setdefault(k, {}), head, res)[last] = val
return res

关于在两个具有嵌套键的字典之间进行映射的 Pythonic 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53741087/

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