如何用lambda函数在python for循环中捕捉keyrerror?

2024-05-17 07:01:00 发布

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

对于这个特定的场景,是否可以为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之外,还有其他方法可以处理这个问题吗?在


Tags: nameincoalaidfordata场景uri
2条回答

{{cd2>有一个适合这种场合的方法。它有两个参数,第一个是要查找的键,第二个是在字典中不存在该键时要使用的默认值。试试这个:

for room in filter(lambda x:x.get('uri',None) in joined_rooms, room_data):
    #do stuff

这里的问题是,尽管在您的情况下可能不是问题,但您需要提供一个默认值,该值将永远不会出现在joined_rooms中。在

如前所述,如果字典中不存在键,可以使用dict.get返回默认值。如果未提供,则此默认值为None。在

另一种方法是使用生成器表达式。这将比filter+lambda表达式更有效。它也可能更具可读性:

for room in (x for x in room_data if x.get('iri') in joined_rooms):
    # do something

另一个完全有效的解决方案是在for循环中使用if语句:

^{pr2}$

相关问题 更多 >