有没有办法确保字典没有嵌套?
例如
键和值原子
{key1: value1, key2: value2}
值不是原子的
{key1: {inner_key11: inner_value11}}
一种方法是检查类型,但是似乎也存在各种其他类型的字典,例如。 defaultdict
答案 0 :(得分:3)
一种方法是检查类型,但是似乎也存在各种其他类型的字典,例如。 defaultdict
这正是检查类型的惯用方法是使用isinstance
的原因。由于defaultdict
是dict
的子类,因此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