2024-04-19 16:01:05 发布
网友
假设我有这个:
[ {"name": "Tom", "age": 10}, {"name": "Mark", "age": 5}, {"name": "Pam", "age": 7} ]
通过搜索“Pam”作为名称,我想检索相关的字典:{name: "Pam", age: 7}
{name: "Pam", age: 7}
如何做到这一点?
在我看来,这是最像Python的方式:
people = [ {'name': "Tom", 'age': 10}, {'name': "Mark", 'age': 5}, {'name': "Pam", 'age': 7} ] filter(lambda person: person['name'] == 'Pam', people)
结果(在Python2中作为列表返回):
[{'age': 7, 'name': 'Pam'}]
注意:在Python 3中,返回一个filter对象。所以python3的解决方案是:
list(filter(lambda person: person['name'] == 'Pam', people))
@Frédéric Hamidi的回答很好。在Python 3.x中,.next()的语法略有变化。因此稍加修改:
.next()
>>> dicts = [ { "name": "Tom", "age": 10 }, { "name": "Mark", "age": 5 }, { "name": "Pam", "age": 7 }, { "name": "Dick", "age": 12 } ] >>> next(item for item in dicts if item["name"] == "Pam") {'age': 7, 'name': 'Pam'}
正如@Matt在评论中提到的,您可以添加默认值:
>>> next((item for item in dicts if item["name"] == "Pam"), False) {'name': 'Pam', 'age': 7} >>> next((item for item in dicts if item["name"] == "Sam"), False) False >>>
您可以使用generator expression:
>>> dicts = [ ... { "name": "Tom", "age": 10 }, ... { "name": "Mark", "age": 5 }, ... { "name": "Pam", "age": 7 }, ... { "name": "Dick", "age": 12 } ... ] >>> next(item for item in dicts if item["name"] == "Pam") {'age': 7, 'name': 'Pam'}
如果需要处理不存在的项,则可以使用用户Mattsuggested in his comment执行操作,并使用稍有不同的API提供默认值:
next((item for item in dicts if item["name"] == "Pam"), None)
在我看来,这是最像Python的方式:
结果(在Python2中作为列表返回):
注意:在Python 3中,返回一个filter对象。所以python3的解决方案是:
@Frédéric Hamidi的回答很好。在Python 3.x中,
.next()
的语法略有变化。因此稍加修改:正如@Matt在评论中提到的,您可以添加默认值:
您可以使用generator expression:
如果需要处理不存在的项,则可以使用用户Mattsuggested in his comment执行操作,并使用稍有不同的API提供默认值:
相关问题 更多 >
编程相关推荐