如何更改字典中的答案键?

2024-05-16 20:29:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样的数据,没有不一致的地方。我可能需要选择一些ID。我可以知道python中更简单的方法吗

这就是我掌握的数据

dd = [
    {
        "id": "abc",
        "age": "23",
        "response": [
            {"QID": "2a", "answer": "a"},
            {"QID": "2b", "answer": 2},
            {"QID": "2c", "answer": 1},
        ],
    },
    {
        "id": "cde",
        "age": "20",
        "response": [
            {"QID": "2a", "answer": "b"},
            {"QID": "2b", "answer": 2},
            {"QID": "2c", "answer": 2},
        ],
    },
    {
        "id": "dfe",
        "age": "21",
        "response": [
            {"QID": "2a", "answer": "a"},
            {"QID": "2b", "answer": 3},
            {"QID": "2c", "answer": 4},
        ],
    },
]

我想改变所有的QID2B和2c。实际上有10个ID需要更改。 我想把1换成A,2换成B,3换成C,4换成D

dd = [
    {
        "id": "abc",
        "age": "23",
        "response": [
            {"QID": "2a", "answer": "a"},
            {"QID": "2b", "answer": "b"},
            {"QID": "2c", "answer": "a"},
        ],
    },
    {
        "id": "cde",
        "age": "20",
        "response": [
            {"QID": "2a", "answer": "b"},
            {"QID": "2b", "answer": "b"},
            {"QID": "2c", "answer": "b"},
        ],
    },
    {
        "id": "dfe",
        "age": "21",
        "response": [
            {"QID": "2a", "answer": "a"},
            {"QID": "2b", "answer": "c"},
            {"QID": "2c", "answer": "d"},
        ],
    },
]

我对python有点陌生。很抱歉,没有提供任何代码,我有一个尝试。因为我在读取QID时收到错误消息


Tags: 数据方法answeridageresponse地方dd
3条回答

如果您想将更改限制在特定的值和特定的问题上,只需遍历字典,检查您想要更改的内容是否符合这两个条件,然后在需要时更改值。默认情况下,表示resp['answer'] in changes的部分将查找changesdict键

changes = {1: 'a', 2: 'b', 3: 'c', 4: 'd'}
questions_to_fix = ('2b', '2c')

# Iterate through each quiz
for record in dd:
    # Loop through each question/response
    for resp in record['response']:
        # Check that the question ID is one you want to update and that the
        # answer is something you want to convert.
        if resp['QID'] in questions_to_fix and resp['answer'] in changes:
            # Lists and dictionaries are mutable, so you can change it in place
            resp['answer'] = changes[resp['answer']]

下面是print(dd)的输出

[
    {
        "id": "abc",
        "age": "23",
        "response": [
            {"QID": "2a", "answer": "a"},
            {"QID": "2b", "answer": "b"},
            {"QID": "2c", "answer": "a"},
        ],
    },
    {
        "id": "cde",
        "age": "20",
        "response": [
            {"QID": "2a", "answer": "b"},
            {"QID": "2b", "answer": "b"},
            {"QID": "2c", "answer": "b"},
        ],
    },
    {
        "id": "dfe",
        "age": "21",
        "response": [
            {"QID": "2a", "answer": "a"},
            {"QID": "2b", "answer": "c"},
            {"QID": "2c", "answer": "d"},
        ],
    },
]

如果您意识到不需要将其局限于特定的问题,您可以省略验证问题id的部分,这是您想要修复的部分。您还可以使用dict.get(key, default)语法从changesdict中提取更改(如果可用)

changes = {1: 'a', 2: 'b', 3: 'c', 4: 'd'}

for record in dd:
    for resp in record['response']:
        resp['answer'] = changes.get(resp['answer'], resp['answer'])

您可以尝试以下方法:

for obj in dd:
    for i in obj["response"]:
        if i["QID"] in ("2b", "2c") and i["answer"] in (1,2,3,4):
            i["answer"] = ["a", "b", "c", "d"][i["answer"]-1]

print(dd)

我不知道你尝试了什么,但是你能给这个代码一个机会吗

# _*_ coding:  utf-8 -*-

dd = [
    {
        "id": "abc",
        "age": "23",
        "response": [
            {"QID": "2a", "answer": "a"},
            {"QID": "2b", "answer": 2},
            {"QID": "2c", "answer": 1},
        ],
    },
    {
        "id": "cde",
        "age": "20",
        "response": [
            {"QID": "2a", "answer": "b"},
            {"QID": "2b", "answer": 2},
            {"QID": "2c", "answer": 2},
        ],
    },
    {
        "id": "dfe",
        "age": "21",
        "response": [
            {"QID": "2a", "answer": "a"},
            {"QID": "2b", "answer": 3},
            {"QID": "2c", "answer": 4},
        ],
    },
]

for element in dd:
    for r in element["response"]:
        if r["QID"] == "2b" or "2c":
            if r["answer"] == 1: 
                r["answer"] = "A"
            elif r["answer"] == 2: 
                r["answer"] = "B"
            elif r["answer"] == 3: 
                r["answer"] = "C"
            elif r["answer"] == 4: 
                r["answer"] = "D"

print(dd)

这应该可以完成工作,在遇到要查找的键时,用正确的值更新字典

相关问题 更多 >