有沒有辦法確保字典不嵌套?如何檢查python中的嵌套字典結構?
例如
鍵和值原子
{key1: value1, key2: value2}
值不是原子
{key1: {inner_key11: inner_value11}}
一種方法是檢查的類型,但有似乎是其他風味變化字典也,例如。 defaultdict
有沒有辦法確保字典不嵌套?如何檢查python中的嵌套字典結構?
例如
鍵和值原子
{key1: value1, key2: value2}
值不是原子
{key1: {inner_key11: inner_value11}}
一種方法是檢查的類型,但有似乎是其他風味變化字典也,例如。 defaultdict
一種方法是檢查類型,但似乎有不同的其他字典的風格,例如。 defaultdict
這正是爲什麼檢查類型的慣用方法是使用isinstance
。由於defaultdict
是dict
的子類,isinstance(x, dict)
對於defaultdict
將成立。另外,你可能想看看collections.abc
(或collections
,在3.2和更早的版本),看看dict
是否真的是你想要檢查的。如果你想趕上任何映射,甚至像blist.sorteddict
,你會檢查isinstance(x, collections.abc.Mapping)
。或者,如果你想捕獲任何容器(包括序列,集合等),collections.abc.Container
。或者你可能想要collections.abc.Iterable
。你可以閱讀這些描述,並決定哪一個對你的用例來說意味着「不是原子的」。
您可以檢查該值是否從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
你爲什麼要這樣做?如果這些值有限制,請檢查這些限制(例如:「必須是數字」)。 –
在這種情況下,我想問的第一個問題是「你爲什麼要這樣做?」第二個問題是「你確定嗎?」 – TigerhawkT3