Python词典搜索列表

2024-04-24 09:50:29 发布

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

假设我有:

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

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

如何做到这一点


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

您可以使用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)

要查找项目的索引,而不是项目本身,您可以enumerate()列表:

next((i for i, item in enumerate(dicts) if item["name"] == "Pam"), None)

在我看来,这是最具python风格的方式:

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

filter(lambda person: person['name'] == 'Pam', people)

结果(在Python 2中作为列表返回):

[{'age': 7, 'name': 'Pam'}]

注意:在Python3中,返回一个filter对象。因此,python3解决方案是:

list(filter(lambda person: person['name'] == 'Pam', people))

@Frédéric Hamidi的回答很好。在Python3.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
>>>

相关问题 更多 >