python - 根据值比较字典列表
问题描述
我有两个字典列表:
old_data = [{'company': 'Amazon', 'logged_in': '2019-01-20'},
{'company': 'Facebook', 'logged_in': '2019-04-20'},
{'company': 'Google', 'logged_in': '2019-04-20'}]
new_data = [{'company': 'Amazon', 'logged_in': '2019-01-26'},
{'company': 'Facebook', 'logged_in': '2019-04-12'},
{'company': 'LinkedIn', 'logged_in': '2019-04-20'},
{'company': 'Wiki', 'logged_in': '2019-04-20'}]
只有在以下情况下,我才有兴趣从 new_data 获取列表元素:
- new_data 中的公司不在 old_data 中
- 如果公司同时在 new_data 和 old_data 中,则仅当 new_data 中的 logged_in 时间晚于 old_data 时
预期结果:
[{'company': 'Amazon', 'logged_in': '2019-01-26'},
{'company': 'LinkedIn', 'logged_in': '2019-04-20'},
{'company': 'Wiki', 'logged_in': '2019-04-20'}]
到目前为止,我尝试过:
filter_data = []
for nd in new_data:
if nd['company'] not in [d['company'] for d in old_data]:
filter_data.append(nd)
elif nd['company'] in [d['company'] for d in old_data]:
date_ = # logged_in time of the company from old_data
filter_data.append(nd if nd['logged_in']> date_)
filter_data
解决方案
old_data = [{'company': 'Amazon', 'logged_in': '2019-01-20'},
{'company': 'Facebook', 'logged_in': '2019-04-20'},
{'company': 'Google', 'logged_in': '2019-04-20'}]
new_data = [{'company': 'Amazon', 'logged_in': '2019-01-26'},
{'company': 'Facebook', 'logged_in': '2019-04-12'},
{'company': 'LinkedIn', 'logged_in': '2019-04-20'},
{'company': 'Wiki', 'logged_in': '2019-04-20'}]
old_data = {i["company"]: i["logged_in"] for i in old_data}
result = []
for i in new_data:
if i["company"] not in old_data:
result.append(i)
elif i["logged_in"] > old_data[i["company"]]:
result.append(i)
print(result)
输出:
[{'company': 'Amazon', 'logged_in': '2019-01-26'},
{'company': 'LinkedIn', 'logged_in': '2019-04-20'},
{'company': 'Wiki', 'logged_in': '2019-04-20'}]
笔记:
- 转换
old_data
为字典以便于查找。
推荐阅读
- command-line-arguments - 通过 main 函数解析命令行参数
- python - 使用openpyxl将数据从列表附加到excel
- c++ - 尾随返回类型
- catboost - Catboost calc_feature_statistics 不绘图
- python - 我如何在 KivyMD 中制作多行标签?
- sonarqube - 在 SonarQube 中为每个开发人员计算 LOC
- python - 如何获得在输出中添加真实属性总和的函数?
- python - 如何刷新 QListView 项目的图标?
- python - 按子列表的第二个元素对嵌套列表进行排序,而不使用内置排序函数、循环或递归
- opensuse - 无法在 Open Suse 上安装 GridDB