Make a list consistent

Question:

I have 2 list ..

a = [{'Work': 'R'}, {'Area': 'S0'}, {'Type': 'PIV'}, {'Disc': 'LA'}, {'L': 'A'}] 
b = [{'Key': '9', 'FileName': '123A.pdf', 'Code': '1', 'Type': 'PNHRG'}]

output -- [{'Key': '9', 'FileName': '123A.pdf', 'Code': '1', 'Type': 'PNHRG','Work': 'R','Area': 'S0','Type': 'PIV','Disc': 'LA','L': 'A'}]

I tried ‘extend’,’append’,’insert’ but did not get desired
output. tried all most all list operations with loops too. I am
not in position to change any kind of types for this.

Tried this solution too without luck. not sure where I am missing.

How do I make a flat list out of a list of lists?

Asked By: RRP

||

Answers:

You can use a doubly-nested dictionary comprehension, iterating over all the items in all the dicts in all the lists. Assuming multiple dicts in b might not be necessary, but makes it easier.

>>> a = [{'Work': 'R'}, {'Area': 'S0'}, {'Type': 'PIV'}, {'Disc': 'LA'}, {'L': 'A'}] 
>>> b = [{'Key': '9', 'FileName': '123A.pdf', 'Code': '1', 'Type': 'PNHRG'}]
>>> [{k: v for lst in (a, b) for d in lst for k, v in d.items()}]
[{'Work': 'R', 'Area': 'S0', 'Type': 'PNHRG', 'Disc': 'LA', 'L': 'A', 'Key': '9', 'FileName': '123A.pdf', 'Code': '1'}]

Addendum: If there are any keys that appear in more than one dictionary, as is the case with "type" here, the value from the last dictionary that was iterated in the comprehension will be used, i.e. b here. If you need the value from a, do ... for lst in (b, a).... In your expected output, that key appears twice, but that is not possible unless you change the format, as in the other answer.

Answered By: tobias_k

Extra from the answer provided by tobias_k:

If you want to combine both lists of dictionaries (and more when you have it) as a dictionary with a list of values in the same key. You can do this.

from collections import defaultdict

mydict = defaultdict(list)

for i in (a+b):
    for key, value in i.items():
        mydict[key].append(value)
        

mydict
Out[32]: 
defaultdict(list,
            {'Work': ['R'],
             'Area': ['S0'],
             'Type': ['PIV', 'PNHRG'],
             'Disc': ['LA'],
             'L': ['A'],
             'Key': ['9'],
             'FileName': ['123A.pdf'],
             'Code': ['1']})
Categories: questions Tags:
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.