是否可以使用lambdas操作每个字典?
为了澄清,只想从每个元素中删除_id
密钥。
Wonder如果没有像(toolz),函数或复制dict对象这样的第三方,有一种优雅的方式来实现这个简单的任务。
传统方式:
cleansed = {k:v for k,v in data.items() if k not in ['_id'] }
另一种方式:
def clean(iterable):
for d in iterable:
del d['_id']
return
第三方方式:
Python functional approach: remove key from dict using filter
答案 0 :(得分:5)
功能编程倾向是不改变原始对象,而是返回数据的新修改副本。主要问题是del
是一种陈述,无法在功能上使用。
也许这让你高兴:
[d.pop('_id') for d in my_dicts]
将修改my_dicts
中的所有词典,并从中删除'_id'
键。结果列表是_id
值的列表,但字典在原始my_dicts
中进行了编辑。
我根本不建议使用它,因为它不像第二个例子那么容易理解。使用函数式编程来改变持久性数据根本不是优雅的。但如果你需要......
答案 1 :(得分:1)
检查这是否符合您的要求:
# Python 2.x
func = lambda iterable, key="_id": type(iterable)([{k: v for k, v in d.iteritems() if k != key} for d in iterable])
# Python 3.x
func = lambda iterable, key="_id": type(iterable)([{k: v for k, v in d.items() if k != key} for d in iterable])