【问题标题】:Create a list of dictionaries with unique keys from a list of dictionaries with duplicated keys从具有重复键的字典列表中创建具有唯一键的字典列表
【发布时间】:2019-03-29 13:40:32
【问题描述】:

我有一个字典列表:

records = [{id:123, name:'Course A', enrolled_date:'1st Feb'}, 
           {id:123, name:'Course A', enrolled_date:'1st Jan'},
           {id:456, name:'Course B', enrolled_date:'1st Jan'}]

我想根据这些数据创建一个新的字典列表。新列表应仅包含具有 ids 在该列表范围内唯一的字典,例如:

new_records = [{id:123, name:'Course A'}, 
               {id:456, name:'Course B'}]

这是我迄今为止尝试过的代码。这显然不起作用 - 但我已竭尽全力纠正它。

new_records = []

for record in records: 
    new_id = record['id']
    new_name = record['name'] 
    new_dict = {'id':new_id, 'name',new_name}
    If new_id not in new_records:
        new_records.append(new_dict)

【问题讨论】:

  • enrolled_date 密钥对会发生什么情况?你只是想放弃吗?
  • @MooingRawr 是的,我只想要一个不重复的课程 ID 和名称列表
  • 基于您要排除重复观察的内容?
  • 你应该检查过if new_dict in new_records :)

标签: python python-2.7 list dictionary


【解决方案1】:

这是基于您提供的代码,但对于其他 cmets 中提到的大型列表,它的运行速度非常慢。

new_records = []

for record in records: 
    new_id = record['id'] 
    new_name = record['name'] 
    new_dict = {'id':new_id, 'name': new_name}
    if not any(new_record['id'] == new_id for new_record in new_records):
        new_records.append(new_dict)

【讨论】:

  • 那是一个错字——即使使用record,我尝试过的代码也不起作用。我已经更新了我的代码以删除类型红鲱鱼
【解决方案2】:

您也可以通过使用一组已经“看到”的条目过滤数组来做到这一点:

records = [{"id":123, "name":'Course A', "enrolled_date":'1st Feb'}, 
           {"id":123, "name":'Course A', "enrolled_date":'1st Jan'},
           {"id":456, "name":'Course B', "enrolled_date":'1st Jan'}]

seen     = set()
new_dict = [d for d in records if not(d['id'] in seen or seen.add(d['id']))]

# {'id': 123, 'name': 'Course A', 'enrolled_date': '1st Feb'}
# {'id': 456, 'name': 'Course B', 'enrolled_date': '1st Jan'}

【讨论】:

    猜你喜欢
    • 2020-09-12
    • 2018-08-22
    • 2021-09-04
    • 2021-12-07
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    • 2010-12-16
    • 2019-03-12
    相关资源
    最近更新 更多