如何测试键是否在另一个字典中的字典中?

2024-10-04 09:30:02 发布

您现在位置:Python中文网/ 问答频道 /正文

如何测试一个键是否在一个字典中,在另一个字典中?你知道吗

例如,我希望它返回True,前提是'panicroom'在'Shane'字典内,在ratings字典内。你知道吗

ratings={'Shane': {'Panic Room': 4, 'Avatar': 5}, 'Joe': {'Panic Room': 3}}

会返回真的,因为肖恩的字典里有“恐慌空间”。你知道吗

如果我用“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"

但它们似乎不起作用。你知道吗


Tags: 用户intrueif字典yesroomprint
1条回答
网友
1楼 · 发布于 2024-10-04 09:30:02

你有一个数据结构,你想从中获取信息。设计的一个重要部分是找出你想要什么,以及如何处理在设计过程中遇到的错误。那么,让我们从数据开始

>>> 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

这些是处理嵌套dict的一些常见方法,如您所见,哪个选项最好取决于您对给定任务的目标。你知道吗

相关问题 更多 >