首页 > 解决方案 > 在列表中过滤字典

问题描述

我需要在 a 中过滤dictionarya list。我的数据如下所示:

[('John', 'Samantha', {'source': 'family'}),
 ('John', 'Jill', {'source': 'work'})]

我需要用 过滤记录source=family,我尝试了以下但没有奏效:

expectedResult = [i for i in my_list if i['source'] == 'family']

非常感谢您的帮助!

标签: pythonpython-3.xdictionary

解决方案


在您的列表理解中,i是元组之一,所以('John', 'Samantha', {'source': 'family'})or ('John', 'Jill', {'source': 'work'})。那不是一本字典,所以你不能把它当作一本!

如果您的元组始终由 3 个元素组成,并且第 3 个元素是带有source键的字典,请使用:

[i for i in my_list if i[2]['source'] == 'family']

如果这些假设中的任何一个不成立,您将不得不添加更多代码。例如,如果字典始终存在但'source'可能缺少键,则可以dict.get()在键不存在时使用返回默认值:

[i for i in my_list if i[2].get('source') == 'family']

如果元组的长度可以变化,但字典始终是最后一个元素,则可以使用负索引:

[i for i in my_list if i[-1]['source'] == 'family']

等等。作为一个程序员,你总是要检查这些假设。


推荐阅读