如何在Python中使用某些键来选择字典?

2024-09-29 23:25:00 发布

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

我有这样的JSON data和大约100个问题。我如何筛选问题,最多只能筛选到40

这是数据样本:

data=[{"id": "AA11",
"resp": [
    {"answer": "A","number": 1},
    {"answer": "A","number": 2},
    {"answer": "B","number": 3},
    {"answer": "D","number": 4},
    {"answer": "E","number": 5}
]},
{"id": "AA22",
"resp": [
    {"answer": "A","number": 1},
    {"answer": "A","number": 2},
    {"answer": "B","number": 3},
    {"answer": "D","number": 4},
    {"answer": "E","number": 5}
]},
{"id": "AA33",
"resp": [
    {"answer": "A","number": 1},
    {"answer": "A","number": 2},
    {"answer": "B","number": 3},
    {"answer": "D","number": 4},
    {"answer": "E","number": 5}
]}]

在本例中,我是否可以仅提取数字3以下的数据作为示例

输出:

data=[{"id": "AA11",
"resp": [
    {"answer": "A","number": 1},
    {"answer": "A","number": 2},
    {"answer": "B","number": 3}
]},
{"id": "AA22",
"resp": [
    {"answer": "A","number": 1},
    {"answer": "A","number": 2},
    {"answer": "B","number": 3}
]},
{"id": "AA33",
"resp": [
    {"answer": "A","number": 1},
    {"answer": "A","number": 2},
    {"answer": "B","number": 3}
]}]

Tags: 数据answeridjson示例numberdata数字
3条回答

过滤到一个特定的元素应该可以这样做

def filter(question,num):
    temp = {}
    for key in question:
        temp[key] = question[key]
    temp['resp'] = question['resp'][:num]
    return temp

def filter_list(questions,num):
    temp = []
    for question in questions:
        temp.append(filter(question,num))
    return temp

data = [{}...]
filtered_data = filter_list(data)


您会注意到filter创建了question的副本,并且只更改了副本。更改数据结构可能很有用,但最好尽可能将数据结构视为不可变的

作为奖励,您不会以这种方式丢失任何原始数据

for item in data:
    item['resp'] = item['resp'][:3]

Python式的方式是一种理解:

filtered = [{'id': d['id'], 'resp': [x for x in d['resp'] if x['number'] <= 3]}
            for d in data]

正如预期的那样:

[{'id': 'AA11',
  'resp': [{'answer': 'A', 'number': 1},
           {'answer': 'A', 'number': 2},
           {'answer': 'B', 'number': 3}]},
 {'id': 'AA22',
  'resp': [{'answer': 'A', 'number': 1},
           {'answer': 'A', 'number': 2},
           {'answer': 'B', 'number': 3}]},
 {'id': 'AA33',
  'resp': [{'answer': 'A', 'number': 1},
           {'answer': 'A', 'number': 2},
           {'answer': 'B', 'number': 3}]}]

相关问题 更多 >

    热门问题