Python 从iterable中的每个元素中删除的单个键的优雅方式
是否可以使用lambdas操作iterable中的每个字典 为了澄清,只想从每个元素中删除Python 从iterable中的每个元素中删除的单个键的优雅方式,python,functional-programming,Python,Functional Programming,是否可以使用lambdas操作iterable中的每个字典 为了澄清,只想从每个元素中删除\u id键 想知道是否有一种优雅的方式来实现这个简单的任务,而不需要像(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['_
\u id
键
想知道是否有一种优雅的方式来实现这个简单的任务,而不需要像(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
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
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
函数式编程的趋势是不改变原始对象,而是返回数据的新修改副本。主要问题是,
del
是一个语句,不能在功能上使用
也许这让你高兴:
[d.pop('_id') for d in my_dicts]
这将修改my_dicts
中的所有词典,并从中删除“id”
键。结果列表是\u id
值的列表,但字典是在原始my\u dicts
中编辑的
我不建议使用这个,因为它不像你的第二个例子那么容易理解。使用函数式编程更改持久性数据一点也不优雅。但是如果您需要…函数式编程的趋势是不改变原始对象,而是返回数据的新修改副本。主要问题是,
del
是一个语句,不能在功能上使用
也许这让你高兴:
[d.pop('_id') for d in my_dicts]
这将修改my_dicts
中的所有词典,并从中删除“id”
键。结果列表是\u id
值的列表,但字典是在原始my\u dicts
中编辑的
我不建议使用这个,因为它不像你的第二个例子那么容易理解。使用函数式编程更改持久性数据一点也不优雅。但是如果您需要…请检查这是否符合您的要求:
# 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])
检查这是否符合您的要求:
# 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])
我有一个疑问,方法1是否不起作用?非常类似于您的第二种方法:定义
del del_id(d):del[''u id']
,然后使用map
map(del_id,iterable)
是一种特定的编程风格,其中包括尝试复制而不是删除它们。但您也会说“只想从每个元素中删除_idkey”。是否要修改原始目录?那么#2是python的正常方法。为此调用filter
是不可取的,因为这取决于它的副作用,而不是filter的返回值。我怀疑,方法1是否不起作用?与第二种方法非常类似:定义del del_id(d):del[''u id']
然后使用map
map(del_id,iterable)
是一种特殊的编程风格,除其他外,它试图复制内容,而不是删除内容。但您也会说“只想从每个元素中删除_idkey”。是否要修改原始目录?那么#2是python的正常方法。不赞成为此调用filter
,因为这取决于它的副作用,而不是filter的返回值。