如何筛选包含词典列表的词典



Dictionary={'list': [{'id': 1, 'task': 'Harry', 'completed': False}, {'id': 2, 'task': 'Simon', 'completed': True}]}

我想用completed = True过滤这个字典中的所有项目,并将其添加到另一个列表中

如果基础字典的唯一键是list,那么只需迭代其内容并将其附加到列表中

completed = []
for d in dictionary["list"]:
if d["completed"]:
completed.append(d)

或者作为列表理解:

completed = [d for d in dictionary["list"] if d["completed"]]

如果字典中只有一个键,则可以通过单行表达式实现:

d = {'list': [{'id': 1, 'task': 'Harry', 'completed': False}, {'id': 2, 'task': 'Simon', 'completed': True}]}
li = [i for i in d['list'] if i['completed']]
print(li)
>> [{'id': 2, 'task': 'Simon', 'completed': True}]

现在,考虑到字典中有多个关键字,那么:

d = {
'list1': [{'id': 1, 'task': 'Harry', 'completed': False}, {'id': 2, 'task': 'Simon', 'completed': True}],
'list2': [{'id': 1, 'task': 'Harry', 'completed': False}, {'id': 2, 'task': 'Simon', 'completed': True}],
}
all_items = []
new_filter_d = dict() # get sub list based on each different key
for k, v in d.items():
all_items += [i for i in v if i['completed']]
new_filter_d[k] = [i for i in v if i['completed']]
print(all_items)
>> [{'id': 2, 'task': 'Simon', 'completed': True},
{'id': 2, 'task': 'Simon', 'completed': True}]
print(new_filter_d)
>> {'list1': [{'id': 2, 'task': 'Simon', 'completed': True}],
'list2': [{'id': 2, 'task': 'Simon', 'completed': True}]}

这可能会帮助您

list_items = {'list': [{'id': 1, 'task': 'Harry', 'completed': False}, 
{'id': 2, 'task': 'Simon', 'completed': True}],
'list_2': [{'id': 1, 'task': 'helena', 'completed': False}, 
{'id': 2, 'task': 'carlos', 'completed': True}]}
new_list = []
for list_name in list_items:
for list_of_dict in list_items[list_name]:
if list_of_dict["completed"] == True:
new_list.append(list_of_dict)
[{'id': 2, 'task': 'Simon', 'completed': True},
{'id': 2, 'task': 'carlos', 'completed': True}]

最新更新