python - 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'] 还是有什么好的方法?
谢谢
解决方案
@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; # {}
推荐阅读
- javascript - 如何实现将另一个添加到 django 模型表单
- apache-kafka - 是否有任何工具可以读取 Kafka 消息按内容过滤它们?
- python - crossref.restful 如何只获取第一个 URL 结果?
- java - 带有自签名证书的 Java mqtt 客户端 SSL 配置
- python - 如何使用列名(年)和索引(日/月)将所有值重新索引为日期时间类型
- sql - 在 SQL 中透视总计
- python - 合并一维和二维数组
- android - Qt Android 启动活动并在 onCreate 中获得结果
- java - 在以点分隔的特定字符串出现后检查子字符串
- mysql - SQL - 需要帮助编写/修改 MYSQL 查询