Python和字典一样的对象 - python

我需要字典的python 3.1深度更新函数(该函数将递归更新父词典中的子字典)。

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

但是鸭子的输入是Python的基本原理,那么如何检查对象是否像字典一样?

谢谢!

编辑:感谢所有的答案。以防万一,我编码的函数可以在这里找到:http://blog.cafeaumiel.com/public/python/dict_deep_update.py

python大神给出的解决方案

在collections模块中检查(3.x中的新功能)抽象基类(ABC):

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

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

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

然后,如果您创建自己的类似dict的类,请进行收集,将其映射为基础之一。

另一种方法是尝试捕获字典操作的任何异常,但是,在您要讨论的递归问题上,我宁愿先对基类型进行检查,而不要弄清楚到底是哪个dict或subdict或其他dict成员。不在那里抛出异常。

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

用大写字母拆分字符串,但忽略AAA Python Regex - python

我的正则表达式:vendor = "MyNameIsJoe. I'mWorkerInAAAinc." ven = re.split(r'(?<=[a-z])[A-Z]|[A-Z](?=[a-z])', vendor) 以大写字母分割字符串,例如:'我的名字是乔。 I'mWorkerInAAAinc”变成…

如何打印浮点数的全精度[Python] - python

我编写了以下函数,其中传递了x,y的值:def check(x, y): print(type(x)) print(type(y)) print(x) print(y) if x == y: print "Yes" 现在当我打电话check(1.00000000000000001, 1.0000000000000002)它正在打印:<…

Python:检查新文件是否在文件夹中[重复] - python

This question already has answers here: How do I watch a file for changes? (23个答案) 3年前关闭。 我是python的新手,但是我尝试创建一个自动化过程,其中我的代码将侦听目录中的新文件条目。例如,某人可以手动将zip文件复制到一个特定的文件夹中,并且我希望我的代码能够在文件完全…

Python sqlite3数据库已锁定 - python

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…

Python pytz时区函数返回的时区为9分钟 - python

由于某些原因,我无法从以下代码中找出原因:>>> from pytz import timezone >>> timezone('America/Chicago') 我得到:<DstTzInfo 'America/Chicago' LMT-1 day, 18:09:00 STD…