如何合并两个字典并根据键替换值?

时间:2020-04-02 21:18:59

标签: python pandas list dictionary replace

dict1 = [{"names": 'john, will', "age": 2, "score": 4.1}{"names": 'tom, sam', "age": 3, "score": 6}]
dict2 = {'john': '001','will': '002', 'tom': '003', 'sam': '004}

dict1是列表中的嵌套字典,而dict2是字典。我正在尝试对dict1进行迭代,并根据匹配的键用dict2中的值替换“名称”值。

所需的输出将是:

dict3 = [{"names": '001, 002', "age": 2, "score": 4.1}{"names": '003, 004', "age": 3, "score": 6}]

遍历dict1的事情困扰着我。还有“名称”中的字符串/值没有分开的事实。我没有运气就尝试了字典理解。

{k: dict2.get(v, v) for k, v in dict1.items()}

我非常初学者-感谢您的帮助或指导!

2 个答案:

答案 0 :(得分:0)

这是一种方法。首先确保您的第一个词典是有效列表:

A = [
    {"names": 'john, will', "age": 2, "score": 4.1},
    {"names": 'tom, sam', "age": 3, "score": 6}
]
B = {'john': '001', 'will': '002', 'tom': '003', 'sam': '004'}

然后,您可以应用此自定义函数,该函数在您的第二个字典中循环并尝试将其可以找到的每个键替换为其值:

def replace_name(names):
    for k, v in B.items():
        names = names.replace(k, v)
    return names

df['names'].apply(replace_name)

答案 1 :(得分:0)

遍历名为dict1的列表(是的,这是一个名为dict1的列表,令人困惑...),对于每个元素x遍历其键和值,如果键等于names,然后根据dict2替换字符串,只记得记住将结果字符串分配回原来的dict,因为替换不是就地执行。

for x in dict1:
    for k, v in x.iteritems():
        if k == 'names':
            for kk, vv in dict2.iteritems():
                v = v.replace(kk, vv)
        x[k] = v


print(dict1)
> [{'age': 2, 'score': 4.1, 'names': '001, 002'}, {'age': 3, 'score': 6, 'names': '003, 004'}]