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。非常感谢。事实上,答案比我想象的要快得多,所以我还没有测试它们。我现在正在做这件事。作为将来的参考:我也试过这件事,它很管用