Python 为另一个字典中的值替换字典键

Python 为另一个字典中的值替换字典键,python,dictionary,Python,Dictionary,我有一个字典列表,每个字典的键下都有我想替换的信息 因此,我正在考虑遍历每一个字典并替换这些值 我有另一个字典,里面有我想替换为键的值,以及应该作为值的最终值 事情是这样的: listOfDicts = [{'value_1' : 'A', 'value-2' : 'B', 'valu&_3' : 'C'}, {'value-1' : 'D', 'value_2' : 'E', 'value-3' : 'F'}, {'value_1' : 'G', 'value_2' : 'H', 'v

我有一个字典列表,每个字典的键下都有我想替换的信息

因此,我正在考虑遍历每一个字典并替换这些值

我有另一个字典,里面有我想替换为键的值,以及应该作为值的最终值

事情是这样的:

listOfDicts = [{'value_1' : 'A', 'value-2' : 'B', 'valu&_3' : 'C'}, {'value-1' : 'D', 'value_2' : 'E', 'value-3' : 'F'}, {'value_1' : 'G', 'value_2' : 'H', 'value_3' : 'I'}]
listOfDicts = [{
'value_1' : 'A',
'value_2' : 'B',
'value_3' : 'C'},
{'value_1' : 'D',
'value_2' : 'E',
'value_3' : 'F'},
...}
然后我有另一本字典作为修复此信息的基础:

fixer = {'value-2' : 'value_2', 'value&_3' : 'value_3', 'value-3' : 'value_3', ...}
我怎么做这个替代品

- 编辑:

期望的输出应该是这样的:

listOfDicts = [{'value_1' : 'A', 'value-2' : 'B', 'valu&_3' : 'C'}, {'value-1' : 'D', 'value_2' : 'E', 'value-3' : 'F'}, {'value_1' : 'G', 'value_2' : 'H', 'value_3' : 'I'}]
listOfDicts = [{
'value_1' : 'A',
'value_2' : 'B',
'value_3' : 'C'},
{'value_1' : 'D',
'value_2' : 'E',
'value_3' : 'F'},
...}

我们可以用一个函数修复每个字典:

fixer = {'value-2' : 'value_2', 'value&_3' : 'value_3', 'value-3' : 'value_3'}

def fix_dictionary(dict_):
    return { fixer.get(k, k): v for k, v in dict_.items() }
这将为给定的
dict\uuu
构建一个新字典,其中
fixer
中的键将被“固定”(替换为
fixer
字典中的相应值)

然后,我们可以生成一个新的固定词典列表,其中包含:

[fix_dictionary(dict_) for dict_ in listOfDicts]
或者我们可以取消该功能,并使用一行程序:


这应该适合您:

listOfDicts = [{'value_1' : 'A', 'value-2' : 'B', 'value&_3' : 'C'}, {'value-1' : 'D', 'value_2' : 'E', 'value-3' : 'F'}, {'value_1' : 'G', 'value_2' : 'H', 'value_3' : 'I'}]
fixer = {'value-1' : 'value_1', 'value-2' : 'value_2', 'value&_3' : 'value_3', 'value-3' : 'value_3'}

for i in range(len(listOfDicts)):

    keys = list(listOfDicts[i].keys())
    temp_dict = dict()

    for item in keys:
        if item in fixer:
            temp_dict[fixer[item]] = listOfDicts[i][item]

        else:
            temp_dict[item] = listOfDicts[i][item]

    listOfDicts[i] = temp_dict
print(listOfDicts)
输出

[{'value_1': 'A', 'value_2': 'B', 'value_3': 'C'}, {'value_1': 'D', 'value_2': 'E', 'value_3': 'F'}, {'value_1': 'G', 'value_2': 'H', 'value_3': 'I'}]

解释
这个程序所做的是遍历列表中的每个项,并获取字典中当前项的键。然后,它创建一个临时字典(
temp\u dict
),稍后将固定值存储在其中。然后,程序进行检查,查看是否需要修复任何键,如果需要,则根据
fixer
字典修复键。最后,它用固定值替换了
listOfDicts
中迭代的项。

如果我理解正确,您想要这样的内容吗

import json
import copy


listOfDicts = [
    {
        "valu&_3": "C",
        "value-2": "B",
        "value_1": "A"
    },
    {
        "value-1": "D",
        "value-3": "F",
        "value_2": "E"
    },
    {
        "value_1": "G",
        "value_2": "H",
        "value_3": "I"
    }
]
fixer = {
    "valu&_3": "value_3",
    "value-2": "value_2",
    "value-3": "value_3"
}

newDict = copy.deepcopy(listOfDicts)
for oldDct in newDict:
    for k2, v2 in fixer.items():
        value = oldDct.pop(k2, None)
        if value:
            oldDct[v2] = value

print('listOfDicts'.center(80, '-'))
print(json.dumps(listOfDicts, indent=4))
print('newDict'.center(80, '-'))
print(json.dumps(newDict, indent=4))
输出:

----------------------------------listOfDicts-----------------------------------
[
    {
        "valu&_3": "C",
        "value-2": "B",
        "value_1": "A"
    },
    {
        "value-1": "D",
        "value-3": "F",
        "value_2": "E"
    },
    {
        "value_1": "G",
        "value_2": "H",
        "value_3": "I"
    }
]
------------------------------------newDict-------------------------------------
[
    {
        "value_1": "A",
        "value_3": "C",
        "value_2": "B"
    },
    {
        "value-1": "D",
        "value_2": "E",
        "value_3": "F"
    },
    {
        "value_1": "G",
        "value_2": "H",
        "value_3": "I"
    }
]

你能显示预期的输出吗?现在,你的文本说你想“修补”这些值,但当我看到它时,不知怎么的,我有一个印象,你想修复这些键。有任何答案对你有用吗?如果是这样的话,那就按问题旁边的勾号,确认你接受了效果最好的答案。就这么做吧,@WillemVanOnsem。非常感谢。事实上,答案比我想象的要快得多,所以我还没有测试它们。我现在正在做这件事。作为将来的参考:我也试过这件事,它很管用