我有这本字典(让它变得简单):
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/