簡體   English   中英

按字典列對字典列表進行分組

[英]Group list of dictionaries by dictionary column

我需要你的幫助來解決這個任務:我有一個包含有關產品的下一個數據的字典列表:

    - id;
    - title;
    - country;
    - seller;

在輸出結果中,我希望將所有具有相同 id 的字典分組,創建一個名為“info”的新鍵,該鍵必須由包含有關產品“國家/地區”和產品“賣家”信息的字典列表組成,與每一種產品。

輸入數據

data = [
    {"id": 1, "title": "Samsung", "country": "France", "seller": "amazon_fr"},
    {"id": 2, "title": "Apple", "country": "Spain", "seller": "amazon_es"},
    {"id": 2, "title": "Apple", "country": "Italy", "seller": "amazon_it"},
]

輸出數據

result = [
    {"id": 1, "title": "Samsung", "info": [{"country": "France", "seller": "amazon_fr"}]},
    {"id": 2, "title": "Apple", "info": [{"country": "Spain", "seller": "amazon_es"}, {"country": "Italy", "seller": "amazon_it"}]},
]

非常感謝您的努力。 PS Pandas 解決方案也很受歡迎。

這是一個直接的 python 解決方案,根據data每個字典的id值創建一個結果字典,並在找到匹配的id值時更新該字典中的值。 然后使用字典的值來創建輸出列表:

data = [
    {"id": 1, "title": "Samsung", "country": "France", "seller": "amazon_fr"},
    {"id": 2, "title": "Apple", "country": "Spain", "seller": "amazon_es"},
    {"id": 2, "title": "Apple", "country": "Italy", "seller": "amazon_it"},
]

result = {}
for d in data:
    id = d['id']
    if id in result:
        result[id]['info'] += [{ "country": d['country'], "seller": d['seller'] }]
    else:
        result[id] = { "id": id, "title": d['title'], "info" : [{ "country": d['country'], "seller": d['seller'] }] };
result = [r for r in result.values()]

print(result)

輸出:

[
 {'title': 'Samsung', 'id': 1, 'info': [{'seller': 'amazon_fr', 'country': 'France'}]},
 {'title': 'Apple', 'id': 2, 'info': [{'seller': 'amazon_es', 'country': 'Spain'}, 
                                      {'seller': 'amazon_it', 'country': 'Italy'}
                                     ]
 }
]

您可以使用 itertools.groupby:

from operator import itemgetter
from itertools import groupby

data.sort(key=itemgetter('id'))
group = groupby(data, key=lambda x: (x['id'], x['title']))
result = [
    {'id': i, 'title': t, 'info': [{'country': d['country'], 'seller': d['seller']} for d in v]}
    for (i, t), v in group]

輸出:

[{'id': 1,
  'title': 'Samsung',
  'info': [{'country': 'France', 'seller': 'amazon_fr'}]},
 {'id': 2,
  'title': 'Apple',
  'info': [{'country': 'Spain', 'seller': 'amazon_es'},
   {'country': 'Italy', 'seller': 'amazon_it'}]}]

暫無
暫無

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

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