-1

I am trying to merge dictionary based on their similar specific values. Currently i have this dictionary:

    [{'max_score': '110', 'total_mark': '75', 'id': 1},
     {'max_score': '110', 'total_mark': '75', 'id': 2},
     {'max_score': '131', 'total_mark': '99', 'id': 1}, 
     {'max_score': '131', 'total_mark': '64', 'id': 2}]

and i am trying to merge them like:

    ['id': '1',
     'rec':[
             {'max_score': '110', 'total_mark': '75'},
             {'max_score': '131', 'total_mark': '99'}
           ],

     'id': '2',
     'rec':[
            {'max_score': '110', 'total_mark': '75'}, 
            {'max_score': '131', 'total_mark': '64'}
           ]
    ]

any help please. Thanks in advance.

Javed
  • 1,613
  • 17
  • 16

2 Answers2

1

You can do it using a simple forloop

x = [{'max_score': '110', 'total_mark': '75', 'id': 1},
     {'max_score': '110', 'total_mark': '75', 'id': 2},
     {'max_score': '131', 'total_mark': '99', 'id': 1}, 
     {'max_score': '131', 'total_mark': '64', 'id': 2}]

d = {}
for i in x:
    if i["id"] not in d:
        d[i["id"]] = {'rec': [{'max_score': i['max_score'], 'total_mark': i['total_mark']}]}
    else:
        d[i["id"]]['rec'].append({'max_score': i['max_score'], 'total_mark': i['total_mark']})

print d

Output:

{1: {'rec': [{'total_mark': '75', 'max_score': '110'}, {'total_mark': '99', 'max_score': '131'}]}, 2: {'rec': [{'total_mark': '75', 'max_score': '110'}, {'total_mark': '64', 'max_score': '131'}]}}
Rakesh
  • 81,458
  • 17
  • 76
  • 113
  • `for i in x: d.setdefault(i["id"],[]).append({'max_score': i['max_score'], 'total_mark': i['total_mark']})` to get rid of `if: ... else: ...` – Patrick Artner Feb 12 '18 at 07:40
  • can you please help me to iterate this record? the output is what i am expecting but i am not getting any way to retrieve the data. Help me to get the 'rec' of keys – Javed Feb 12 '18 at 08:02
  • @javed; again you can use a loop to get the "rec" list. example for i in d: print d[i]["rec"] – Rakesh Feb 12 '18 at 08:04
  • Thanks for the help. I am very new to python. I truly appreciate your help. – Javed Feb 12 '18 at 08:09
1
    dict_data = {}
    for  val in data:
        score, mark, id_ = val
        if val[id_] in dict_data:
            dict_data[val[id_]]['rec'].append({"max_score":val[score],"total_mark":val[mark]})
        else:
            dict_data.setdefault(val[id_],{'rec':[{"max_score":val[score],"total_mark":val[mark]}]})
>>>{1: {'rec': [{'max_score': '75', 'total_mark': '110'},
                {'max_score': '99', 'total_mark': '131'}]},
   2: {'rec': [{'max_score': '75', 'total_mark': '110'},
               {'max_score': '64', 'total_mark': '131'}]}}
Veera Balla Deva
  • 790
  • 6
  • 19