Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从iterable中的每个元素中删除的单个键的优雅方式_Python_Functional Programming - Fatal编程技术网

Python 从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['_

是否可以使用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['_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的返回值。