对 Python 中的词典列表进行双重过滤

Double filter for a list of dictionaries in Python

我已经阅读了很多文章和论坛帖子,但还没有完全弄清楚如何改进以下内容。我有一个字典列表,需要用两种方式过滤。

jsonData = [{'a':'1a', 'b':'1b', 'c':'1c'},{'a':'2a','b':'2b', 'c':'2c'}, {'a':'3a','b':'3b', 'c':'3c'}]

我想删除列表中键 c 对应于 3c 的任何字典。下面的第一行实现了这一点。然后我想只保留 b 和 c 键和对应的值。这就是其他人所做的。一切正常,但我想知道第二部分是否也可以用列表理解来表达,是否有任何其他方法可以简化它。

jsonData = [i for i in jsonData if i['c'] != '3c']
for i in range(len(jsonData)): 
    jsonData[i] = {key:value for key,value in jsonData[i].items() if key in ['b','c']}

非常感谢

我相信这样的事情会成功:

[{key:value for key,value in jdata.items() if key in ['b', 'c']} 
 for jdata in jsonData if jdata['c'] != '3c']

它returns

[{'c': '1c', 'b': '1b'}, {'c': '2c', 'b': '2b'}]

根据提供的列表。

您可以使用键视图的类集合性质将 d 的搜索限制为仅您实际使用的键,而不是迭代所有键。

jsonData = [{k: d[k] for k in (d.keys() & {'b', 'c'})} for d in jsonData if d['c'] != '3c']

如果这是 Python 2.7 而不是 Python 3.x,那么 d.keys() 应该是 d.viewkeys().