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

如何在Python中使用某些键来选择字典?,python,json,dictionary,Python,Json,Dictionary,我有这类JSON数据,有大约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

我有这类
JSON数据
,有大约
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}
]}]
试试这个:

new_data = data[0:40]
for item in new_data:
    item['resp'] = item['resp'][0:3]

此解决方案将创建一个具有预期值的新词典。

python方法将是一种理解:

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

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

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
的副本,并且只更改了副本。更改数据结构可能很有用,但最好尽可能将数据结构视为不可变的


作为奖励,这样您就不会丢失任何原始数据

这是否回答了您的问题?“…复杂比复杂好。扁平比嵌套好。稀疏比密集好。可读性很重要…”-Python之禅
[{'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}]}]
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)