Outlier369
Outlier369

Reputation: 45

Create new list of dictionary from two list of dictionaries

I have two list of dictionaries and wanted to create new list of dictionary from existing two list of dictionaries. dict1 have all the details about person (pid, pname , pscore, sid) and dict2 have details about person with city (pid, cid, cscore) wanted to create new list of dictionary where pid from dict1 matches pid of dict2 and add pid, pname, pscore, cscore from both list of dictionaries where match happened into list of new_dict. Any help will be appreciated. Thanks in advance.

   dict1 = [{'pid': [7830351800, 8756822045, 7985031822, 8882181833],
  'pname': ['ABC', 'XYZ', 'QWE', 'MNQ'],
  'pscore': [0.8, 0.8, 0.8, 0.8],
  'sid': 8690694}]
 dict2 = [{'pid': 7830351800, 'cid': [1, 2, 3, 4], 'cscore': [0.8, 0.78, 0.7, 0.45]},
 {'pid': 8756822045, 'cid': [5, 6, 7, 8], 'cscore': [0.9, 0.88, 0.8, 0.75]},
 {'pid': 7985031822, 'cid': [9, 10, 11, 12], 'cscore': [0.5, 0.48, 0.3, 0.25]},
 {'pid': 8882181833, 'cid': [2, 13, 14, 15], 'cscore': [0.6, 0.58, 0.5, 0.45]}]
   new_dict = [{'pid': 7830351800,
  'pname': 'ABC',
  'pscore': 0.8,
  'cid': [1, 2, 3, 4],
  'cscore': [0.8, 0.78, 0.7, 0.45]},
 {'pid': 8756822045,
  'pname': 'XYZ',
  'pscore': 0.8,
  'cid': [5, 6, 7, 8],
  'cscore': [0.9, 0.88, 0.8, 0.75]},
 {'pid': 7985031822,
  'pname': 'QWE',
  'pscore': 0.8,
  'cid': [9, 10, 11, 12],
  'cscore': [0.5, 0.48, 0.3, 0.25]},
 {'pid': 8882181833,
  'pname': 'MNQ',
  'pscore': 0.8,
  'cid': [2, 13, 14, 15],
  'cscore': [0.6, 0.58, 0.5, 0.45]}]

I tried below code but ran into error. I am not able to understand how to solve this. Just started learning python:

new_dict = {}
for k, v in dict1[0].items():
    if v[0] in dict2[0]['pid']:
        new_dict = dict({'pid': v[0], 'pname' :v[0], 'pscore':v[0], 'cid':dict2[0]['cid'], 'cscore':dict2[0]['score']})
        print(new_dict)

Upvotes: 0

Views: 110

Answers (1)

Suraj
Suraj

Reputation: 2477

dict1 = dict1[0]

pname_dict = {key:value for key,value in zip(dict1['pid'], dict1['pname'])}
pscore_dict = {key:value for key,value in zip(dict1['pid'], dict1['pscore'])}
ans = dict2.copy()

for d in ans:
    d['pname'] = pname_dict[d['pid']]
    d['pscore'] = pscore_dict[d['pid']]

Output :

>> ans

[{'pid': 7830351800,
  'cid': [1, 2, 3, 4],
  'cscore': [0.8, 0.78, 0.7, 0.45],
  'pname': 'ABC',
  'pscore': 0.8},
 {'pid': 8756822045,
  'cid': [5, 6, 7, 8],
  'cscore': [0.9, 0.88, 0.8, 0.75],
  'pname': 'XYZ',
  'pscore': 0.8},
 {'pid': 7985031822,
  'cid': [9, 10, 11, 12],
  'cscore': [0.5, 0.48, 0.3, 0.25],
  'pname': 'QWE',
  'pscore': 0.8},
 {'pid': 8882181833,
  'cid': [2, 13, 14, 15],
  'cscore': [0.6, 0.58, 0.5, 0.45],
  'pname': 'MNQ',
  'pscore': 0.8}]

Create 2 dictionaries to match pid ->pname and pid->pscore. These dictionaries are used to add the other 2 key values to the dict2

Upvotes: 1

Related Questions