2015-06-11 45 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