[英]How to know if a value is inside a nested dictionary?
我是 Python 新手,我仍在学习如何使用。 我有以下字典:
dic = {'0': {'text': 'a', 'lang': 'es', 'rating': '4'}, '1': {'text': 'b', 'lang': 'es', 'rating': '3'}, '2': {'text': 'c', 'lang': 'es', 'rating': '1'}, '3': {'text': 'd', 'lang': 'es', 'rating': '2'}, '4': {'text': 'e', 'lang': 'es', 'rating': '5'}}
现在,我想知道文本,例如,'a' 是否是任何这些嵌套字典的值(我知道有一个 value() 函数返回字典的值,但在这种情况下它只会返回第一个字典的值,不是吗?像 0,1,2,3,4)
我试过
for i in range(len(dic)):
if text in dic[i].values():
print("Yes")
else:
print("No")
但这给了我一个值为“0”的 KeyError 。 我搜索了类似的问题,但没有找到任何可以用来解决我的问题的问题。 你能帮我么? 提前致谢。
您可以使用any
:
dic = {'0': {'text': 'a', 'lang': 'es', 'rating': '4'}, '1': {'text': 'b', 'lang': 'es', 'rating': '3'}, '2': {'text': 'c', 'lang': 'es', 'rating': '1'}, '3': {'text': 'd', 'lang': 'es', 'rating': '2'}, '4': {'text': 'e', 'lang': 'es', 'rating': '5'}}
result = any('a' in d.values() for d in dic.values())
首先从你尝试过的开始,你确实可以:
for
循环迭代dic
的值,这些值也是字典。'text'
的值是否等于'a'
。'Yes'
并停止循环。'No'
。 让我们用一个漂亮的for/else
语句来做:
for d in dic.values():
if d['text'] == 'a':
print("Yes")
break
else:
print("No")
更进一步,您还可以:
for
循环和==
操作,any
将if
和break
语句替换为更智能的 Python 内置函数。这段较短的代码实际上会以一种真正的 Pythonic 方式完成与前一个完全相同的事情:
if any(d['text'] == 'a' for d in dic.values()):
print("Yes")
else:
print("No")
享受 !
您将字典视为列表。 你不能索引字典,像这样:
dic[0]
但是您可以从给定的键中获取值,如下所示:
dic["0"] # yields {'text': 'a', 'lang': 'es', 'rating': '4'}
因此,修改您的 for 循环如下:
for i in dic:
...
如果您确定要查找的字符串不在键名中,那么另一个简单的解决方案是将整个 dict 转换为 str 并搜索字符串
if 'a' in str(dic):
print("a is there")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.