你如何检查python中的嵌套字典结构?

时间:2015-06-11 23:33:44

标签: python dictionary

有没有办法确保字典没有嵌套?

例如

键和值原子

{key1: value1, key2: value2}

值不是原子的

{key1: {inner_key11: inner_value11}}

一种方法是检查类型,但是似乎也存在各种其他类型的字典,例如。 defaultdict

2 个答案:

答案 0 :(得分:3)

  

一种方法是检查类型,但是似乎也存在各种其他类型的字典,例如。 defaultdict

这正是检查类型的惯用方法是使用isinstance的原因。由于defaultdictdict的子类,因此isinstance(x, dict)的{​​{1}}属实。

此外,您可能需要查看collections.abc(或defaultdict,在3.2及更早版本中),看看collections是否真的是您要检查的内容。如果您想要捕获任何映射,即使是dict之类的内容,也请检查blist.sorteddict。或者,如果您想要捕获任何容器(包括序列,集等),isinstance(x, collections.abc.Mapping)。或许你想要collections.abc.Container。您可以阅读说明并确定哪一个意味着"而不是原子"为您的用例。

答案 1 :(得分:1)

您可以检查值是否继承自Mapping类。 Defaultdict是一种dict,OrderedDict直接继承自dict。

>>> from collections import Mapping

>>> d1 = {key1: value1, key2: value2}
>>> d2 = {key1: {inner_key11: inner_value11}}

>>> print isinstance(d1[key1], Mapping)
False
>>> print isinstance(d2[key1], Mapping)
True