我很确定我一定会缺少一些真正的基础知识,但是,有没有一种方法可以将一本词典与另一本词典进行映射?。
例如,给定这样的字典:
d = {'a': {'b': 'r1', 'c': 'r2'}, 'v': {'x': 'r4', 'o': 'r2'}}
并使用这样的映射器:
mapper = {'a': 0, 'b': 1, 'c': 2, 'v': 3, 'x': 4, 'o': 5}
预期输出应如下所示:
result = {0: {1: 'r1', 2: 'r2'}, 3: {4: 'r4', 5: 'r2'}}
答案 0 :(得分:0)
您可以使用在映射器字典中以对应值递归替换键的函数:
def map_keys(d, m):
return {m[k]: map_keys(v, m) for k, v in d.items()} if isinstance(d, dict) else d
使map_keys(d, mapper)
返回:
{0: {1: 'r1', 2: 'r2'}, 3: {4: 'r4', 5: 'r2'}}
答案 1 :(得分:-1)
这不是递归的,因此仅适用于类似的输入(如果您还可以的话):
d = {'a': {'b': 'r1', 'c': 'r2'}, 'v': {'x': 'r4', 'o': 'r2'}}
mapper = {'a': 0, 'b': 1, 'c': 2, 'v': 3, 'x': 4, 'o': 5}
res = {}
for k, v in d.items():
res.update({mapper[k]: {mapper[x]: y for x, y in v.items()}})
print(res)
# {0: {1: 'r1', 2: 'r2'}, 3: {4: 'r4', 5: 'r2'}}
缩影:
res = {mapper[k]: {mapper[x]: y for x, y in v.items()} for k, v in d.items()}