所以,我想尽我所能成为一名优秀的 Python 程序员和鸭子类型,但我遇到了一些问题,我的输入是 dict
或 list
的 dict
我无法区分它们是可迭代的,因为它们都是。
我的下一个想法就是调用 list(x)
并希望完整地返回我的列表并将我的字典作为列表中的唯一项目;唉,它只是给了我字典键的列表。
我现在正式失去了想法(缺少调用 isinstance
,众所周知,这不是很 pythonic)。我只想得到一个字典列表,即使我的输入是一个单独的字典。
最佳答案
真的,没有明显的 pythonic 方法来做到这一点,因为它是一种不合理的输入格式,而明显的 pythonic 方法是修复输入……
但如果你不能那样做,那么是的,你需要编写一个适配器(尽可能靠近输入边缘)。最好的方法取决于实际数据。如果它真的是一个字典,或者一个字典列表,并且没有别的可能(例如,你正在调用 json.loads
来自一些返回对象或一个对象数组),那么 isinstance
就没有问题了。
如果你想让它更通用一点,你可以使用适当的ABCs .例如:
if isinstance(dict_or_list, collections.abc.Mapping):
return [dict_or_list]
else:
return dict_or_list
但是除非您有充分的理由需要这种普遍性,否则您只是在隐藏棘手的变通方法,而最好让它尽可能地可见。例如,如果它来自某个远程服务器的 json.loads
,那么处理不是 dict
的 Mapping
是没有用的,对吧?
(如果您使用的第三方客户端库只返回“类似字典的内容”或“包含类似字典的内容的类似列表的内容”,那么是的,请使用 ABC。或者,如果该库不甚至不支持正确的 ABC,您可以编写代码来尝试特定的方法,如 keys
。但如果这是一个问题,您将知道您正在解决的具体细节,并且可以编写代码并适当记录。)
关于python - 区分字典和字典列表的 pythonic 方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18138653/