2017-11-29 18 views
-4

私は同じ値のcategoryNameに基づいて辞書をグループ化しようとしています。同じキーに基づいて辞書のリストから新しい辞書を作成する

リスト辞書のソース

data = [{'category_id': 1, 
    'categoryName': 'Civil', 
    'author': 'x', 
    'title': 'Stone'}, 
{'category_id': 1, 
    'categoryName': 'Civil', 
    'author': 'y', 
    'title': 'House'}, 
{'category_id': 2, 
    'categoryName': 'Programming', 
    'author': 'x', 
    'title': 'Python'}, 
{'category_id': 2, 
    'categoryName': 'Programming', 
    'author': 'y', 
    'title': 'Java'}] 

私の目標出力

new_data = {'Civil':[{'Title':'Stone', 'author':'x'}, 
        {'Title':'House', 'author':'y'}], 
     'Programming':[{'Title':'Python', 'author':'x'}, 
         {'Title':'Java', 'author':'y'}]} 

私の試みこれまで:

categories = set([i['categoryName'] for i in data]) 

との区分名の

ビルドリスト次にトンを構築彼は新しい弁護士と

d = {} 
for cat in categories: 
    d[cat] = [] 
    for book in data: 
     if book['category_name'] == cat: 
      d[cat].append(book) 

と働いています。しかし、私はこれが正しいかエレガントな方法だとは思わない。

もっと多くのソリューションをお探しですか?ありがとう!

+6

尋ねる前に自分で何をしようとしましたか? – depperm

+0

@deppermが言ったように、あなたのコードを最初に示してください。また、 'defaultdict'を参照すると、ここで本当に役に立ちます。 – theBrainyGeek

+0

@deppermこんにちは、ごめんなさい、自分の試みを追加するのを忘れてしまった。私は質問を編集しました。ありがとう! – Steven

答えて

0

dataの各要素の詳細を取得する必要があるため、setの手順をスキップし、各リスト要素を繰り返してタイトルと著者を取得します。カテゴリがnew_dataの場合はリストに追加し、そうでない場合は必要な情報を含む新しいリストを追加します。

data = [{'category_id': 1, 
    'categoryName': 'Civil', 
    'author': 'x', 
    'title': 'Stone'}, 
{'category_id': 1, 
    'categoryName': 'Civil', 
    'author': 'y', 
    'title': 'House'}, 
{'category_id': 2, 
    'categoryName': 'Programming', 
    'author': 'x', 
    'title': 'Python'}, 
{'category_id': 2, 
    'categoryName': 'Programming', 
    'author': 'y', 
    'title': 'Java'}] 

new_data={} 
for d in data: 
    if d['categoryName'] in new_data: 
    new_data[d['categoryName']].append({'Title':d['title'],'author':d['author']}) 
    else: 
    new_data[d['categoryName']]=[{'Title':d['title'],'author':d['author']}] 

print(new_data) 
#{'Civil': [{'Title': 'Stone', 'author': 'x'}, {'Title': 'House', 'author': 'y'}], 'Programming': [{'Title': 'Python', 'author': 'x'}, {'Title': 'Java', 'author': 'y'}]} 
関連する問題