Python字典列表搜索

2024-04-19 16:01:05 发布

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

假设我有这个:

[
{"name": "Tom", "age": 10},
{"name": "Mark", "age": 5},
{"name": "Pam", "age": 7}
]

通过搜索“Pam”作为名称,我想检索相关的字典:{name: "Pam", age: 7}

如何做到这一点?


Tags: name名称age字典pammarktom
3条回答

在我看来,这是最像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()的语法略有变化。因此稍加修改:

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

相关问题 更多 >