我已经阅读了很多文章和论坛帖子,但还没有找到如何改进以下内容。我有一个字典列表需要以两种方式过滤。
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']}
非常感谢
答案 0 :(得分:1)
您可以使用关键视图的类似集合的特性将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()
。
答案 1 :(得分:0)
我相信这样的事情可以解决问题:
page
它返回
[{key:value for key,value in jdata.items() if key in ['b', 'c']}
for jdata in jsonData if jdata['c'] != '3c']
给出提供的清单。