对于这个特定的场景,是否可以为x['uri']
捕获一个KeyError
。在
joined_rooms = ('coala/coala', 'coala/coala-bears')
room_data = [{'id': '130', 'uri': 'coala/coala'},
{'id': '234', 'name': 'Nitanshu'},
{'id': '897', 'uri': 'coala/coala-bears'}]
for room in filter(lambda x: x['uri'] in joined_rooms, room_data):
#do stuff
这样做:
^{pr2}$将跳过KeyError
引发后的所有项。在
除了使用if condition
迁移到经典的嵌套for loops
之外,还有其他方法可以处理这个问题吗?在
{{cd2>有一个适合这种场合的方法。它有两个参数,第一个是要查找的键,第二个是在字典中不存在该键时要使用的默认值。试试这个:
这里的问题是,尽管在您的情况下可能不是问题,但您需要提供一个默认值,该值将永远不会出现在
joined_rooms
中。在如前所述,如果字典中不存在键,可以使用
dict.get
返回默认值。如果未提供,则此默认值为None
。在另一种方法是使用生成器表达式。这将比
filter
+lambda
表达式更有效。它也可能更具可读性:另一个完全有效的解决方案是在
^{pr2}$for
循环中使用if
语句:相关问题 更多 >
编程相关推荐