2

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])
        }
user3420561
  • 188
  • 1
  • 2
  • 20
  • 2
    1) This isn't your code (you have typos that prevent it from being even syntactically valid). 2) The extra list brackets are due to your inner listcomp; you can always [flatten them away](https://stackoverflow.com/q/952914/364696) once you've combined the stuff you care about. – ShadowRanger Mar 08 '22 at 11:24

1 Answers1

1

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'}]}
Happy Ahmad
  • 1,072
  • 2
  • 14
  • 33