簡體   English   中英

使用具有重復鍵的字典列表創建具有唯一鍵的字典列表

[英]Create a list of dictionaries with unique keys from a list of dictionaries with duplicated keys

我有一個詞典列表:

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)

這是基於您提供的代碼,但對於大型列表,它的工作確實非常慢,如其他注釋中所述。

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)

您也可以通過使用一組已經“看到”的條目過濾數組來完成此操作:

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'}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM