2015-06-11 43 views
0

有没有办法确保字典不嵌套?如何检查python中的嵌套字典结构?

例如

键和值原子

{key1: value1, key2: value2} 

值不是原子

{key1: {inner_key11: inner_value11}} 

一种方法是检查的类型,但有似乎是其他风味变化字典也,例如。 defaultdict

+0

你为什么要这样做?如果这些值有限制,请检查这些限制(例如:“必须是数字”)。 –

+1

在这种情况下,我想问的第一个问题是“你为什么要这样做?”第二个问题是“你确定吗?” – TigerhawkT3

回答

3

一种方法是检查类型,但似乎有不同的其他字典的风格,例如。 defaultdict

这正是为什么检查类型的惯用方法是使用isinstance。由于defaultdictdict的子类,isinstance(x, dict)对于defaultdict将成立。另外,你可能想看看collections.abc(或collections,在3.2和更早的版本),看看dict是否真的是你想要检查的。如果你想赶上任何映射,甚至像blist.sorteddict,你会检查isinstance(x, collections.abc.Mapping)。或者,如果你想捕获任何容器(包括序列,集合等),collections.abc.Container。或者你可能想要collections.abc.Iterable。你可以阅读这些描述,并决定哪一个对你的用例来说意味着“不是原子的”。

1

您可以检查该值是否从Mapping类继承。 Defaultdict是一种字典,OrderedDict直接从字典继承。

>>> 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