python - 从可迭代的每个元素中删除单个键的优雅方法

标签 python functional-programming

是否可以使用 lambda 来操作可迭代的每个字典?

澄清一下,只想从每个元素中删除 _id 键。

想知道是否有一种优雅的方法来完成这个简单的任务,而无需第 3 方,如 (toolz)、函数或复制 dict 对象。


我没有搜索的可能解决方案。

  1. 传统方式:

    cleansed = {k:v for k,v in data.items() if k not in ['_id'] }
    
  2. 另一种方式:

    def clean(iterable):
        for d in iterable:
            del d['_id']
        return
    
  3. 第 3 方方式:

Python functional approach: remove key from dict using filter

最佳答案

函数式编程倾向于不改变原始对象,而是返回数据的新修改副本。主要问题是 del 是一个语句,不能在功能上使用。

也许这会让你高兴:

[d.pop('_id') for d in my_dicts]

这将修改 my_dicts 中的所有字典并从中删除 '_id' 键。结果列表是 _id 值的列表,但字典是在原始 my_dicts 中编辑的。

我根本不建议使用它,因为它不像您的第二个示例那样容易理解。使用函数式编程来改变持久数据一点也不优雅。但是如果你需要...

关于python - 从可迭代的每个元素中删除单个键的优雅方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41450230/

相关文章:

scala - monad 的一些语言和用途

java - Java 8 函数式编程中 'reduce' 函数的第三个参数的用途

list - Lua 语言 : how use something similar to python list comprehensions

python - 如何使用 ForeignKey ('self' ) 获取字段而不可能链接到同一条目?

python - Flask、Flask-Login 和 Socket.io : Keep a session active even when not sending requests

python - Docker 中的 visdom.server

python - Python 中的 Arrayfun?

python - 引发异常或引发异常()

scala - 根据 A 成员将 List[A] 转换为 List[Option[A]]

haskell - 如何使用记录设计扩展