提问人:paaskanama 提问时间:1/14/2023 更新时间:1/14/2023 访问量:57
使用字典键和值筛选 Python 列表
Filter a Python list using Dictionary keys and values
问:
目标:在 Python 3.8+ 中使用字典作为参考筛选列表列表
案例使用:在查看嵌套列表(一系列调查回复)时,根据控制问题过滤掉回复。在字典中,对问题 3(列表中的索引 2)和问题 7(索引 6)的回答都应为对应值 5。如果响应的两个答案都不是 5,则不应在filtered_responses列表中填充它们。
对如何解决这个问题的解释持开放态度。我已经查看了几个涉及使用列表过滤词典的资源。此方法是首选,因为某些调查响应包含相同的值数组,因此保留了列表元素。
no_of_survey_questions = 10
no_of_participants = 5
min_score = 1
max_score = 10
control_questions = {3: 5,
7: 5, }
unfiltered_responses = [[4, 5, 4, 5, 4, 5, 4, 5, 4, 5], # omit
[9, 8, 7, 6, 5, 4, 3, 2, 1, 1], # omit
[5, 5, 5, 5, 5, 5, 5, 5, 5, 5], # include
[5, 2, 5, 2, 5, 2, 5, 9, 1, 1], # include
[1, 2, 5, 1, 2, 1, 2, 1, 2, 1]] # omit
for response in unfiltered_responses:
print(response)
print()
filtered_responses = [] # should contain only unfiltered_responses values marked 'include'
for response in filtered_responses:
# INSERT CODE HERE
print(response)
提前致谢!
答:
2赞
Andrej Kesely
1/14/2023
#1
您可以使用列表推导 + :all()
control_questions = {3: 5,
7: 5}
unfiltered_responses = [[4, 5, 4, 5, 4, 5, 4, 5, 4, 5], # omit
[9, 8, 7, 6, 5, 4, 3, 2, 1, 1], # omit
[5, 5, 5, 5, 5, 5, 5, 5, 5, 5], # include
[5, 2, 5, 2, 5, 2, 5, 9, 1, 1], # include
[1, 2, 5, 1, 2, 1, 2, 1, 2, 1]] # omit
filted_questions = [subl for subl in unfiltered_responses if all(subl[k-1] == v for k, v in control_questions.items())]
print(filted_questions)
指纹:
[
[5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
[5, 2, 5, 2, 5, 2, 5, 9, 1, 1]
]
评论
1赞
paaskanama
1/14/2023
将 subl[k] 稍微修改为 subl[k-1],以将文字字典键与列表索引对齐,看起来这可以工作。谢谢!
1赞
Andrej Kesely
1/14/2023
@paaskanama是的,我粘贴了错误的代码:)固定。subl[k-1]
上一个:如何从列表嵌套词典形成词典列表?
评论