区分字典和字典列表的Python方法是什么?

Mor*_*ris 3 python dictionary list

所以,我想是一个很好的Python程序员和鸭类的地方我可以,但我有一个有点问题,在我的输入可以是一个dict或一个listdict秒。

我无法区分它们是可迭代的,因为它们都是。

我的下一个想法只是打电话list(x),希望能完整地恢复我的清单,并把我的辞典作为清单中的唯一项目。las,它只给了我字典的键列表。

我现在正式没主意(isinstance众所周知,这不怎么称呼,不是很pythonic)。即使我输入的是一个单独的字典,我也只想以字典列表作为结尾。

aba*_*ert 5

确实,没有明显的pythonic方法可以做到这一点,因为这是一种不合理的输入格式,而显而易见的pythonic方法是修复输入。

但是,如果不能这样做,那么是的,您需要编写一个适配器(尽可能靠近输入边缘)。最好的方法取决于实际数据。如果它确实是一个dict或一个dict列表,并且别无其他选择(例如,您正在调用json.loads某些返回一个对象或对象数组的写得不好的服务的结果),那么就没有错与isinstance

如果您想使其更加通用,可以使用适当的ABC。例如:

if isinstance(dict_or_list, collections.abc.Mapping):
    return [dict_or_list]
else:
    return dict_or_list
Run Code Online (Sandbox Code Playgroud)

但是,除非有充分的理由需要这种通用性,否则您只是在隐藏骇人的解决方法,而最好还是使其尽可能可见。如果是(例如)json.loads来自某个远程服务器,那么处理Mapping不是a的对象dict就没有用,对吗?

(如果使用的第三方客户端库仅向您返回“类似dict的东西”或“包含类似dict的东西的列表类似的东西”,那么可以使用ABC。或者,如果该库甚至没有为了支持适当的ABC,您可以编写尝试使用特定方法的代码,例如keys。但是,如果遇到问题,您将知道自己正在解决的具体细节,并且可以适当地编码和记录文档。)