有没有办法确保字典不嵌套?如何检查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