首页 > 解决方案 > 根据值比较字典列表

问题描述

我有两个字典列表:

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 获取列表元素:

  1. new_data 中的公司不在 old_data 中
  2. 如果公司同时在 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

标签: pythondictionary

解决方案


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为字典以便于查找。

推荐阅读