首页 > 解决方案 > python:从列表中获取最后一个匹配的字典

问题描述

如何从字典列表中获取最后一个匹配的字典:

例子:

test_dict={'user'='xxx','tasks':[{'id':'01','age':'60'},{'id':'02','age':'50'},{'id':'01','age':'65'},{'id':'02','age':'65'}]}

如何从“id”为“01”的任务中获取最后一个字典?

我需要遍历整个列表 - test_dict['tasks'] 还是有什么好的方法?

谢谢

标签: pythonpython-2.7listdictionaryiteration

解决方案


@Aavik,你可以试试下面的代码。

我使用filter()函数来过滤带有特定键的字典。

在http://rextester.com/URYZW46252在线尝试代码(使用filter()函数的效率较低)。

还可以尝试http://rextester.com/HLVQL50077(使用列表理解,这是一种有效的方式)。

def get_last_dict_with_specific_id(test_dict, id):
    # Create tasks list from test_dict
    tasks = test_dict["tasks"]

    # filter tasks list based on dictionaries id i.e get a list of dictionaries with only specific id
    # Update the same list tasks with different content (save space)
    tasks = [d for d in tasks if d["id"] == id]
    # tasks = filter(lambda d: d["id"] == id, tasks) # This is efficient like above one

    # Pick the last dictionary and return it
    if tasks:
        return tasks[len(tasks) - 1]
    else:
        return {}

# TEST    

test_dict = {'user': 'xxx','tasks': [{'id':'01','age':'60'},{'id':'02','age':'50'},{'id':'01','age':'65'},{'id':'02','age':'65'}]};

last_dict_01 = get_last_dict_with_specific_id(test_dict, '01');
print last_dict_01;  # {'age': '65', 'id': '01'}

last_dict_02 = get_last_dict_with_specific_id(test_dict, '02');
print last_dict_02;  # {'age': '65', 'id': '02'}

last_dict_03 = get_last_dict_with_specific_id(test_dict, '03');
print last_dict_03;  # {} 

推荐阅读