Python实现列表中字典的快速查找方法
快速查找列表中指定name的字典
这里有几个实用的方法,你可以根据自己的使用场景来选:
单次查找(找第一个匹配项)
如果只是偶尔查一次,用next()生成器表达式最直接,效率也不错:
mylist = [{'name': 'Delivered-To', 'value': '123'}, {'name': 'Received', 'value': 'abc'}, {'name': 'Payload', 'value': 'xxxxxx'}] target_name = 'Received' # 找到第一个匹配的字典 result = next(item for item in mylist if item['name'] == target_name) print(result) # 输出: {'name': 'Received', 'value': 'abc'}
要是担心找不到目标name会报错,可以加个默认值(比如返回None):
result = next((item for item in mylist if item['name'] == target_name), None)
多次查找(优先推荐)
如果需要反复根据name查找,先把列表转换成以name为键的字典,之后每次查找都是O(1)的速度,效率拉满:
# 一次性转换为映射字典 name_to_item = {item['name']: item for item in mylist} # 直接通过key获取 result = name_to_item.get('Received') print(result) # 输出: {'name': 'Received', 'value': 'abc'}
⚠️ 注意:如果原列表里有多个name相同的字典,后面的会覆盖前面的,这个转换只会保留最后一个匹配项。
查找所有匹配项
要是你的列表里可能存在多个相同name的字典,想要全部捞出来,用列表推导式就搞定:
target_name = 'SomeDuplicateName' results = [item for item in mylist if item['name'] == target_name] # results会是所有符合条件的字典组成的列表
内容的提问来源于stack exchange,提问作者Relax ZeroC
相关产品推荐
相关产品推荐

