Reputation: 198
I am doing one operation on dictionary, where i want to add or append all values with same keys together, my values are list of dictionary.
{'test': [{'Workvalue': [{'for': 'red', 'pro': 'valpr'}, {'for': 'valtest2', 'pro': 'valpr2'}, {'for': 'testing purpose', 'pro': 'testing urpos'}]}, {'WorkLimit': [{'for': 'FLR1', 'pro': 'PLR1'}, {'for': 'FLR2', 'pro': 'PLR2'}]}, {'WorkLimit': [{'for': 'FLR3'}, {'for': 'DAV', 'pro': 'DDAA'}]}]}
I want following output:
{'test': [{'Workvalue': [{'for': 'valtest', 'pro': 'valpr'}, {'for': 'valtest2', 'pro': 'valpr2'}, {'for': 'testing purpose', 'pro': 'testing urpos'}], 'WorkLimit': [{'for': 'FLR1', 'pro': 'PLR1'}, {'for': 'FLR2', 'pro': 'PLR2'}], [{'for': 'FLR3'}, {'for': 'DAV', 'pro': 'DDAA'}]]}}
I am getting this result with my code:
{'test': [{'Workvalue': [[{'for': 'valtest', 'pro': 'valpr'}, {'for': 'valtest2', 'pro': 'valpr2'}, {'for': 'testing purpose', 'pro': 'testing urpos'}]], 'WorkLimit': [[{'for': 'FLR1', 'pro': 'PLR1'}, {'for': 'FLR2', 'pro': 'PLR2'}], [{'for': 'FLR3'}, {'for': 'DAV', 'pro': 'DDAA'}]]}]}
I am getting extra list bracket , but i dont want that.
code i am using trying:
value = {
k: [d.get(k) for d in data['test'] if d.get(k) is not None]
for k in set().union(*data['test])
}
Upvotes: 2
Views: 679
Reputation: 1087
The reason is that d.get(k)
returns an array. However, you can simply use its elements instead of the whole array:
value = {
k: [element for d in data['test'] if d.get(k) is not None for element in d.get(k)]
for k in set().union(*data['test'])
}
Output:
{'WorkLimit': [{'for': 'FLR1', 'pro': 'PLR1'}, {'for': 'FLR2', 'pro': 'PLR2'}, {'for': 'FLR3'}, {'for': 'DAV', 'pro': 'DDAA'}], 'Workvalue': [{'for': 'red', 'pro': 'valpr'}, {'for': 'valtest2', 'pro': 'valpr2'}, {'for': 'testing purpose', 'pro': 'testing urpos'}]}
Upvotes: 1