2017-12-06 7 views
-5

私はこれは私が何をしたかである私は、この(所望の出力を)好きにそれを変換したいdictsdictsのリストをグループ化するには?

[ 
    {"day":"10", "car":"bmw", "count":"3"}, 
    {"day":"10", "car":"audi", "count":"2"}, 
    {"day":"10", "car":"jeep", "count":"4"}, 
    {"day":"11", "car":"bmw", "count":"6"}, 
    {"day":"11", "car":"audi", "count":"7"}, 
    {"day":"11", "car":"jeep", "count":"8"}, 
] 

のリスト

[ 
     {"day":"10", "bmw":"3","audi":"2","jeep":"4"}, 
     {"day":"11","bmw":"6","audi":"7","jeep":"8"}, 
] 

を持っています。これを達成するためのより良い最適な方法があります。

def dl(): 
    list_of_dicts = [ 
      {"day":"10", "car":"bmw", "count":"3"}, 
      {"day":"10", "car":"audi", "count":"2"}, 
      {"day":"10", "car":"jeep", "count":"4"}, 
      {"day":"11", "car":"bmw", "count":"6"}, 
      {"day":"11", "car":"audi", "count":"7"}, 
      {"day":"11", "car":"jeep", "count":"8"}, 
      ] 

    result = [] 
    data = {} 

    for item in list_of_dicts: 

     if not data.get(item["day"], False):  
      data[item["day"]] = [] 
      data[item["day"]].append({item["car"]:item["count"]}) 

     else: 
      data[item["day"]].append({item["car"]:item["count"]}) 

    for key in data: 
     new_dict = {} 
     new_dict["day"] = key 
     for item in data[key]: 
      new_dict.update(item) 
     result.append(new_dict) 

    print result 
    return result 

dl() 

質問は正しい誰かがいない場合は、正しい

この質問に私を助けてください。私は、日ごとに新しい辞書を作成し、その日に基づいてグループに初心者

+7

あなたは、少なくとも試みられてきたと私たちはあなたを助けるでしょうコード例を提供します。それ以外の場合は、本質的に私たちにあなたの宿題を依頼しています。 – MCBama

+0

何かを要約しようとすると(JavaScriptやPythonで)、私はいつもreduce関数を見ようとします。 (map、reduce、filter関数を学んでください - 配列/リスト操作のために便利です)これを見てください:http://book.pythontips.com/en/latest/map_filter.html – Atlas7

+0

あなたは本当に読む必要があります[MCVEドキュメント](https://stackoverflow.com/help/mcve)を参照してください。 しかし、答えるには、部分的な関数でreduceを使います。 'からfunctoolsインポート部分、削減;def f(day、x、y):x.update({y ['car']:y ['count']})y ['day'] == day else x; xを返します。 days = {dict_listのdict_のための{dict _ ['day']}; 出力= [1日の日数を減らす(部分(f、日)、dict_list、{'日':日}) ' – Grr

答えて

-2

使用itertools.groupby午前:

list_of_dicts = [ 
    {"day":"10", "car":"bmw", "count":"3"}, 
    {"day":"10", "car":"audi", "count":"2"}, 
    {"day":"10", "car":"jeep", "count":"4"}, 
    {"day":"11", "car":"bmw", "count":"6"}, 
    {"day":"11", "car":"audi", "count":"7"}, 
    {"day":"11", "car":"jeep", "count":"8"}, 
] 

# to use groupby the list must be sorted 
list_of_dicts.sort(key=operator.itemgetter("day")) 

result_list = [] 
for day, dicts_for_that_day in itertools.groupby(list_of_dicts, key=operator.itemgetter("day")): 
    day_dict = {'day': day} 
    day_dict.update({d['car']: d['count'] for d in dicts_for_that_day}) 
    result_list.append(day_dict) 

print(result_list) 
+0

ここでリストをソートする必要はありません – Manjunath

+0

@Manjunathサンプルリストはすでにソートされていますが、ソートする必要があります。そうでなければ、コードはすべての日をまとめてグループ化することができません。 – nosklo

+0

@noskloありがとうloooooooooooooooooot ..............私は今までitertoolsとオペレータについて知りません。リスト内の75個のオブジェクトに対してこの方法を使用できますか?あなたは本当に素晴らしいです – coder

関連する問題