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

时间:2018-06-13 22:43:31

标签: 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', 'value_3' : 'I'}]

然后我有另一本字典用作修复此信息的基础:

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

我该如何替换?

- 编辑:

所需的输出可能是这样的想法:

listOfDicts = [{
'value_1' : 'A',
'value_2' : 'B',
'value_3' : 'C'},
{'value_1' : 'D',
'value_2' : 'E',
'value_3' : 'F'},
...}

3 个答案:

答案 0 :(得分:2)

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

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_构建一个新词典,其中fixer中的键将被修复" (替换为fixer字典中的相应值。)

然后我们可以生成一个新的固定词典列表:

[fix_dictionary(dict_) for dict_ in listOfDicts]

或者我们可以删除该功能,并使用一个衬垫:

[{ fixer.get(k, k): v for k, v in dict_.items() } for dict_ in listOfDicts]

答案 1 :(得分:1)

这应该适合你:

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_dict),稍后会将固定值存储在其中。然后,程序通过并查看是否需要修复任何密钥,如果是,则根据fixer字典修复密钥。最后,它使用固定值替换listOfDicts中迭代的项目。

答案 2 :(得分:1)

如果我已经正确理解你想要这样的东西吗?

import json
import copy


listOfDicts = [
    {
        "valu&amp;_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&amp;_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&amp;_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"
    }
]