如何测试密钥是否在字典中,另一个字典中?
例如,我希望它仅在“ Panic Room”位于“ Shane”字典内,评级字典内时才返回True
。
ratings={'Shane': {'Panic Room': 4, 'Avatar': 5}, 'Joe': {'Panic Room': 3}}
将返回true,因为Shane的词典中包含“ Panic Room”。
如果我要用“ Joe”查找“ Avatar”,则它将返回
False
,因为没有与“ Joe”相对应的“ Avatar”。要阅读整个词典,可以使用:
print ratings
要阅读用户的评分,请使用:
print ratings["Shane"]
要读取用户的电影分级,请使用:
print ratings["Shane"]["Avatar"]
一个简单的单行答案确实有帮助。
我试过了:
if ratings["Shane"]["Avatar"] in ratings:
print "yes"
和
if ["Shane"]["Avatar"] in ratings:
print "yes"
但它们似乎无效。
最佳答案
您有一个数据结构,您想从中获取信息。设计的重要部分是弄清楚您想要什么,以及如何处理过程中遇到的错误。因此,让我们从数据开始
>>> ratings={'Shane': {'Panic Room': 4, 'Avatar': 5}, 'Joe': {'Panic Room': 3}}
现在我们想看看人们如何喜欢阿凡达
>>> ratings['Shane']['Avatar']
5
>>> ratings['Joe']['Avatar']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'Avatar'
>>> ratings['Fred']['Avatar']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'Fred'
>>>
很多问题。乔没有评价这部电影,弗雷德甚至不在数据库中。显然,我们需要改进错误处理。一种选择是分别测试用户名和电影名称,以便获得详细的错误。在此示例中,我像
KeyError
一样提出了dict
,但是在错误情况下您可以执行其他操作>>> def get_rating(ratings, name, film):
... if name in ratings:
... if film in ratings[name]:
... return ratings[name][film]
... else:
... raise KeyError("{} did not review {}".format(name, film))
... else:
... raise KeyError("{} did not review any films".format(name))
...
>>> for name in ("Shane", "Joe", "Fred"):
... try:
... print(name, get_rating(ratings, name, "Avatar"))
... except KeyError as e:
... print(e)
...
Shane 5
'Joe did not review Avatar'
'Fred did not review any films'
假设我想要电影的平均评分。由于
ratings.values()
是所有针对用户的命令,因此我可以进行简单的列表理解,以检查影片是否获得分级,并且不必担心出现异常情况>>> avatar = [userrate["Avatar"] for userrate in ratings.values()
... if "Avatar" in userrate]
>>> avatar
[5]
>>> average = sum(avatar)/len(avatar)
>>> average
5.0
还有一种选择是将默认值与
dict.get
方法一起使用。在这里,如果用户不存在,则输入空的电影评分dict
,如果电影不存在dict
,则提供默认答案>>> for name in ("Shane", "Joe", "Fred"):
... print(name, ratings.get(name, {}).get("Avatar", "Not rated"))
...
Shane 5
Joe Not rated
Fred Not rated
这些是处理嵌套字典的一些常用方法,如您所见,哪种方法最好取决于给定任务的目标。
关于python - 如何测试键是否在另一个词典中的词典中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35961523/