python - 区分字典和字典列表的 pythonic 方法是什么?

标签 python list dictionary

所以,我想尽我所能成为一名优秀的 Python 程序员和鸭子类型,但我遇到了一些问题,我的输入是 dictlistdict

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

我的下一个想法就是调用 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,那么处理不是 dictMapping 是没有用的,对吧?

(如果您使用的第三方客户端库只返回“类似字典的内容”或“包含类似字典的内容的类似列表的内容”,那么是的,请使用 ABC。或者,如果该库不甚至不支持正确的 ABC,您可以编写代码来尝试特定的方法,如 keys。但如果这是一个问题,您将知道您正在解决的具体细节,并且可以编写代码并适当记录。)

关于python - 区分字典和字典列表的 pythonic 方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18138653/

相关文章:

python - python函数的分析

C# 检查一个词是否在英语词典中?

python - 递增嵌套 Python 字典

Python:识别一维分布中的起伏模式

python - 我可以使用参数插入来指定 MySQL 查询的列名吗?

python - 如何为 Windows 的 pyculib 添加正确的分发 channel ?

c# - 将多个字符串拆分为 C# 中的对象列表

python - 如何从列表中删除除 Python 中的一个元素之外的所有重复项?

python-3.x - 如何使用 Python 中的键扩展字典中的值

python - 开发反向查找字典的有效方法?