Reputation: 480
I have list of dictionaries like these
l = [
{'vehicle': 708.75, 'general': None, 'salesperson': 'SAJANEESH'},
{'vehicle': None, 'general': 1044.48, 'salesperson': 'SAJANEESH'},
{'vehicle': None, 'general': 7035.0, 'salesperson': 'MATHEW'},
]
I am trying to change the form new list of dictionary like this .
expected output
l = [
{'vehicle': 708.75, 'general': 1044.48, 'salesperson': 'SAJANEESH'},
{'vehicle': None, 'general': 7035.0, 'salesperson': 'MATHEW'},
]
I am trying to group the salesperson and add general or vehicle value to it. I try like this
import collections
res = collections.defaultdict(list)
for i in l:
for key, val in i.items():
res[val].append(key)
print(res)
but it shows wrong result.any suggestions to get this??
Upvotes: 0
Views: 106
Reputation: 330
You can use simply iterating through the datastructure
[root@cscale-82-69 python]# cat stck.py
l = [
{'vehicle': 708.75, 'general': None, 'salesperson': 'SAJANEESH'},
{'vehicle': None, 'general': 1044.48, 'salesperson': 'SAJANEESH'},
{'vehicle': None, 'general': 7035.0, 'salesperson': 'MATHEW'},
]
y = []
for each in l:
name = each['salesperson']
count = 0
for _ in y:
if _['salesperson'] == name:
count += 1
for key, val in _.items():
if _[key] == None:
_[key] = each[key]
if count == 0:
y.append(each)
print (l)
print (y)
[root@cscale-82-69 python]# python stck.py
[{'general': 1044.48, 'salesperson': 'SAJANEESH', 'vehicle': 708.75}, {'general': 1044.48, 'salesperson': 'SAJANEESH', 'vehicle': None}, {'general': 7035.0, 'salesperson': 'MATHEW', 'vehicle': None}]
[{'general': 1044.48, 'salesperson': 'SAJANEESH', 'vehicle': 708.75}, {'general': 7035.0, 'salesperson': 'MATHEW', 'vehicle': None}]
[root@cscale-82-69 python]#
Upvotes: 1
Reputation: 705
You can use itertools.groupby
for unique lists:
from itertools import groupby
from operator import itemgetter
key = itemgetter('vehicle')
print([next(v) for _, v in groupby(sorted(l, key=key), key=key)])
Upvotes: 0