python - 检查字典内字典内列表的值

标签 python list dictionary

我有这本字典(让它变得简单):

tmdbMovie = {'spoken_languages': [{'iso_639_1': 'pt', 'name': 'Português'}]}

我正在尝试构建一个 IF 子句来检查“Português”是否是我的字典的有效键。它没有像你想象的那样工作。到目前为止我所做的:

if 'Português' in [tmdbMovie['spoken_languages'][i]['name'] for i in tmdbMovie['spoken_languages']]:

我知道我错过了一些东西......在这个例子中,我的字典内的列表只有一个元素,但它可能不止一个。

错误:

    if 'Português' in [tmdbMovie['spoken_languages'][i]['name'] for i in tmdbMovie['spoken_languages']]:
TypeError: list indices must be integers or slices, not dict

最佳答案

for i in tmdbMovie['spoken_languages']'spoken_languages' 列表中的每个内部字典分配给 i,以便访问其您将使用i['name']的名称。 FWIW,我会在那里使用 d 表示 dict,而不是通常用于数字索引的 i。例如,

tmdbMovie = {'spoken_languages': [{'iso_639_1': 'pt', 'name': 'Português'}]}

if 'Português' in [d['name'] for d in tmdbMovie['spoken_languages']]:
    print('Yes')

输出

Yes

更好的方法是使用any:

if any(d['name'] == 'Português' for d in tmdbMovie['spoken_languages']):
    print('Yes')

any 一旦找到匹配项就会停止查找。此外,in 运算符在列表上效率不高,因为它必须对列表执行线性扫描,直到找到匹配项。 in 适合搜索字典或集合。此外,any 可以立即开始搜索,您的版本必须在 in 开始扫描之前构建完整的名称列表。

关于python - 检查字典内字典内列表的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51003884/

相关文章:

Python MySQL 连接器 fetchone 不返回 dict

python - cx_Oracle 错误。 DPI-1047 : Cannot locate a 64-bit Oracle Client library

python - 具有多个变量的 For 循环 - Python

python - 解释嵌套列表理解如何工作?

python - 如果某个键相同,则获取所有值的平均值

python - 无法解决总和为 k 的连续子数组中的边缘情况

python - 将物理设备挂载到笔记本

list - 我如何将值存储到 Scheme 的读取中?或者那是不可能的?

python - 合并第n层多维字典

python - 从嵌套列表生成字典,Python 3.6