Python:检查变量是否是字典

标签 python python-2.7 python-3.x dictionary

我很好奇在检查 python 中的变量是否为字典时是否存在任何明显的问题?我意识到在 python 中进行类型检查不是很“pythonic”,但我不确定如何解决我的特定问题。

这是一个示例,我正在尝试根据 a.) 对象属性是否存在以及 b.) 如果我要覆盖的值是字典来设置对象的属性。如果它是一个字典,递归函数来设置那些子对象属性。

import six

class OtherObj(object):
    def __init__(self, name):
        self.name = name

class ExObj(object):
    def __init__(self, name, description, other_obj):
        self.name = name
        self.description = description
        self.other_obj = other_obj

def process_dict(obj, **kwargs):
        for key, value in six.iteritems(kwargs):
            if hasattr(obj, key):
                if isinstance(value, dict):
                    process_dict(getattr(obj, key), **value)
                else:
                    setattr(obj, key, value)

obj = ExObj("my name", "my desc", OtherObj("another name"))
process_dict(obj, **{ "name": "no this is my real name",
                      "description": "no this is my real desc",
                      "other_obj": { "name": "other object real name" }  })

最佳答案

好吧,没有明显的问题,但如果你坚持:

  • 他们通常说请求宽恕比请求许可更好。也许只是试图通过 [] 访问它,捕获可能的异常更 Pythonic,但我个人不这么认为。
  • 但我要做的是使用抽象基类:

    import collections 
    isinstance(obj, collections.Mapping)  
    

    通过这种方式,该函数可以支持其他可能的映射类型,而不仅仅是 dict

关于Python:检查变量是否是字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27412523/

相关文章:

python - Sympy 重新配置随机种子

python - Bigquery(和 pandas)- 确保数据插入一致性

python - pip install/tmp/pip-c436mD-unpack/master 成员 espeed-bulbs-71d0cce/docs/social 无效 :

python - 我在基本冒泡排序中做错了什么?

python-2.7 - pylint 找不到 google.cloud

python - 我正在尝试正确地可视化这个 lambda 问题,但我遇到了很多麻烦

python - 当字典由两个列表组成时,对 OrderedDicts 使用 pprint

python - tf.nn.relu 对比 tf.contrib.layers.relu?

linux - 如何通过套接字将 `eof` 信号发送到在远程 shell 中运行的命令?

Python 添加一个没有\n 的新行