Python 和类似字典的对象

2024-03-27

我需要一个用于字典的 python 3.1 深度更新函数(该函数将递归更新父字典内的子字典)。

但我认为,将来,我的函数可能必须处理行为类似于字典但实际上并非如此的对象。此外我想避免使用isinstance and type(因为它们被认为是不好的,因为我几乎可以在每个 Pythonista 的博客上读到)。

但鸭子类型是 Python 哲学的一部分,那么我如何检查一个对象是否类似于字典呢?

Thanks!

编辑:感谢大家的回答。以防万一,我编码的函数可以在这个地方找到:http://blog.cafeaumiel.com/public/python/dict_deep_update.py http://blog.cafeaumiel.com/public/python/dict_deep_update.py


查看集合模块中的(3.x 中的新增)抽象基类 (ABC):

http://docs.python.org/3.1/library/collections.html http://docs.python.org/3.1/library/collections.html

我会考虑使用 isinstance 对照映射进行检查,如下所示:

>>> import collections
>>> isinstance({},collections.Mapping)
True

然后,如果您创建自己的类似字典的类,请创建 collections.Mapping 其基础之一。

另一条路线是尝试捕获字典操作的任何异常,但是通过您正在讨论的递归,我宁愿首先检查基本类型,而不是处理弄清楚什么是 dict 或 subdict 或其他 dict 成员不在那里抛出异常。

编辑添加:检查映射 ABC 而不是检查 dict 的好处是,相同的测试将适用于类似 dict 的类,无论它们是否是 dict 的子类,因此它更灵活,以防万一。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 和类似字典的对象 的相关文章

随机推荐

  • main.cpp:(.text+0x5f): 未定义的引用

    我尝试从 SDL 指南中编写一些练习 我这样编译 g o main main cpp I usr local include SDL2 L usr local lib lSDL2 我得到这个 tmp cci2rYNF o In functi
  • ASP.Net MVC:如何读取我的自定义声明值

    请参阅下面的代码 我知道通过这种方式我们可以将自定义数据添加到索赔中 但现在的问题是如何读回这些值 假设我想读回索赔价值电子邮件和电子邮件2请告诉我需要编写什么代码来读回索赔值电子邮件和电子邮件2 UserManager
  • 如何每秒运行一个 Runnable 来更新 UI

    我正在尝试在 kotlin android 中编写代码以每秒移动一个图像 但我无法使其工作 现在我正在使用Timer安排一个Timer Task每秒 但它没有按预期工作 这是我的代码 class Actvt Image
  • 使用 Google Pretify 显示 HTML

    为了让 Google Prettify 正确显示 HTML 代码示例 您应该替换所有 lt with lt 和所有的 gt with gt 如何仅使用 JavaScript 来自动化该过程 如果您将代码放入
  • 使用 Oracle SQL Developer 查询两个数据库

    有没有办法在 Oracle SQL Developer 中查询两个数据库 在单个查询中 我对 Oracle 不太熟悉 无论如何 除了标准的 CRUD 语法 我正在尝试从 SQL Server 表插入 Oracle 表 想做这样的事情 INS
  • 使用 CSS 显示徽标的正确方法是什么?

    我最近一直在学习CSS 我正在观看的教程系列说显示徽标图像的最佳方法是将文本包装在H1标签中 然后将该标签的CSS样式设置为背景图像 并带有文本缩进 99999 或类似的大数字 这看起来非常粗俗和不优雅 对于 SEO 目的来说 使用 CSS
  • 如何检查 NSString 是否包含数字值?

    我有一个从公式生成的字符串 但是我只想使用该字符串 只要它的所有字符都是数字 如果不是 我想做一些不同的事情 例如显示错误消息 我一直在环顾四周 但发现很难找到任何符合我想做的事情 我看过 NSScanner 但我不确定它是否检查整个字符串
  • 在python中将字节转换为文件对象

    我有一个小应用程序 它使用以下方式读取本地文件 open diefile path r as csv file open diefile path r as file and also uses linecache module 我需要将用
  • Angular2 查询参数订阅触发两次

    尝试处理 OAuth 登录场景 其中如果用户登陆页面authorization code在查询字符串中 我们处理令牌并继续or如果他们在没有该令牌的情况下登陆页面 我们会检查本地存储中是否存在现有令牌 确保其仍然有效 并根据其有效性重定向到
  • requestAccessToEntity iOS6-向后兼容性-EKEventStore

    遵循 iOS6 eventKit 和新的隐私设置 我使用以下代码 它在 iOS6 设备上运行得很好 不过 我希望相同的代码也适用于 iOS 5 x 的设备 并且我希望不要编写 相同的代码 两次 似乎是错误的 任何人都可以协助优雅的解决方案
  • 使用 Tailwind CSS 创建包含文本的水平线 (HR) 分隔线

    我想创建一个 hr 使用 Tailwind CSS 进行分隔 但我想在中间添加一些文本 而不是跨越整个页面宽度的水平线 例如 Continue 我在文档中找不到类似的内容 我怎样才能达到这个效果 如有必要 我可以将 HTML 更改为除 hr
  • spring,如何更改cglib命名策略

    当spring创建代理时 它使用带有默认命名策略的cglib 有什么办法可以改变命名策略吗 生成的类名与我使用的另一个框架冲突 好像是cglibclaims http cglib sourceforge net apidocs net sf
  • 在给定总数、部分数和最大被加数的情况下查找整数分区的数量

    我正在寻找总共 N 个整数分区的数量 其中多个部分为 S 最大部分恰好为 X 而无需枚举所有分区 例如 所有 100 的分区都有 10 个部分 最大部分为 42 我没有找到解决这个问题的定理或分区恒等式 我怀疑这是一个不平凡的问题 不容易从
  • FCM 获取 MismatchSenderId

    我有一个使用 Google FCM 发送推送通知的应用程序 当我向一组用户发送推送通知时 我得到的响应是MismatchSenderId对于其中一些人来说 尽管如此 所有用户都拥有完全相同的应用程序 如何某些用户获得成功响应 而其他用户获得
  • iphone如何通过Xcode拍照后进入图片库

    大家好 我正在实施以下代码来通过我的应用程序拍照 UIApplication sharedApplication keyWindow setRootViewController picker picker sourceType UIImag
  • 找不到模块 create-react-app/script/start.js

    我的程序结构发生了一些变化 由于其复杂性 我无法准确指出问题所在 自从我的应用程序崩溃并且不再工作以来 我尝试了不同的方法 例如删除节点模块包并重新安装它们 但仍然无法工作 每当我尝试跑步时npm 启动我收到以下错误 below is my
  • 使用密码保护关闭的工作簿

    我已经搜索过 但没有找到在关闭的工作簿上添加外部密码的方法 假设我已经关闭了名为 Sample xlm 的工作簿 并且我正在打开一个名为 Test xlm 的工作簿 是否有代码可以让我在 Sample xlsm 上设置密码 我的意思是外部密
  • 空状态页面和导航器问题?

    我想实施空状态页 https material io design communication empty states html content在 Flutter 应用程序中 当新闻源为空时 当提要中没有活动时 我想显示 没有活动 当数据
  • 如何将服务变量与组件 Angular 2 绑定?

    我有一个变量 public tick number 在服务中 该服务注入了另一个服务计时器 它的启动方式如下 class Service constructor public timer TimerService public sendSm
  • Python 和类似字典的对象

    我需要一个用于字典的 python 3 1 深度更新函数 该函数将递归更新父字典内的子字典 但我认为 将来 我的函数可能必须处理行为类似于字典但实际上并非如此的对象 此外我想避免使用isinstance and type 因为它们被认为是不