将字典与另一个字典映射

时间:2019-04-05 14:10:10

标签: python python-3.x dictionary mapping

我很确定我一定会缺少一些真正的基础知识,但是,有没有一种方法可以将一本词典与另一本词典进行映射?。

例如,给定这样的字典:

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'}}

2 个答案:

答案 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()}
相关问题