python - 如何检查python中的字典列表中是否存在键?

标签 python python-2.7

假设我有一个如下所示的字典列表:

[{1: "a"}, {2: "b"}]

指示某个键是否在列表中的一个字典中的pythonic方法是什么?

最佳答案

我可能会写:

>>> lod = [{1: "a"}, {2: "b"}]
>>> any(1 in d for d in lod)
True
>>> any(3 in d for d in lod)
False

尽管如果此列表中有很多 dicts,您可能需要重新考虑您的数据结构。

如果您想要找到第一个匹配项的索引和/或字典,一种方法是使用 nextenumerate:

>>> next(i for i,d in enumerate(lod) if 1 in d)
0
>>> next(d for i,d in enumerate(lod) if 1 in d)
{1: 'a'}
>>> next((i,d) for i,d in enumerate(lod) if 1 in d)
(0, {1: 'a'})

如果它不存在,这将引发 StopIteration:

>>> next(i for i,d in enumerate(lod) if 3 in d)
Traceback (most recent call last):
  File "<ipython-input-107-1f0737b2eae0>", line 1, in <module>
    next(i for i,d in enumerate(lod) if 3 in d)
StopIteration

如果您想避免这种情况,您可以捕获异常或传递 next 一个默认值,例如 None:

>>> next((i for i,d in enumerate(lod) if 3 in d), None)
>>>

正如@drewk 的评论中所指出的,如果您想在多个值的情况下返回多个索引,您可以使用列表推导:

>>> lod = [{1: "a"}, {2: "b"}, {2: "c"}]
>>> [i for i,d in enumerate(lod) if 2 in d]
[1, 2]

关于python - 如何检查python中的字典列表中是否存在键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14790980/

相关文章:

python - 接近 x.0 时奇怪的 Python 行为

python - 寻找改进的乏味循环

python 剪刀石头布

python-2.7 - 使用VTK转换DICOM图像

python - 表包命令 "python setup.py egg_info"失败,错误代码 1

python - ImportError : No module named flask. ext.mysql

python - 使用 Python 获取电子邮件,始终保持连接

python - 返回节点邻域中最大的节点

python - python中二进制文件的异或加密

python - 将数组参数传递给 SQL 命令