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