如何测试密钥是否在字典中,另一个字典中?

例如,我希望它仅在“ 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/

10-09 02:53