Create dictionary from list of dictionaries

Viewed 22

I want to create a new dictionary from the list of dictionaries

The required output is, please suggest:

data2 = {'NUM': [ID], 'NUM': [ID]}
data2 = {'13': [16,4], '131': [12, 11], '132': [9,8]}

I tried Python code as:

data = [{'object': 'XXXX-TSS/RDID-1579/NBLO-723/NUM-13/ID-16'},
{'object': 'XXXX-TSS/RDID-1579/NBLO-723/NUM-131/ID-12'}, 
{'object': 'XXXX-TSS/RDID-1579/NBLO-723/NUM-132/ID-9'}, 
{'object':'XXXX-TSS/RDID-1579/NBLO-723/NUM-13/ID-4'}, 
{'object': 'XXXX-TSS/RDID-1579/NBLO-723/NUM-131/ID-11'}, 
{'object': 'XXXX-TSS/RDID-1579/NBLO-723/NUM-132/ID-8'}]
data2 = {}
for row in data:
    obj = row['object']
    num = obj.split('/')[3].split('-')[-1]
    _id = int(obj.split('-')[-1])
    if num not in data2:
        data2[data2] = _id

Which gives me result as: {'13': 16, '131': 12, '132': 9}

1 Answers

You can use a simple regexp to get the requested output:

data = [
    {'object': 'XXXX-TSS/RDID-1579/NBLO-723/NUM-13/ID-16'},
    {'object': 'XXXX-TSS/RDID-1579/NBLO-723/NUM-131/ID-12'},
    {'object': 'XXXX-TSS/RDID-1579/NBLO-723/NUM-132/ID-9'},
    {'object': 'XXXX-TSS/RDID-1579/NBLO-723/NUM-13/ID-4'},
    {'object': 'XXXX-TSS/RDID-1579/NBLO-723/NUM-131/ID-11'},
    {'object': 'XXXX-TSS/RDID-1579/NBLO-723/NUM-132/ID-8'}
]

result = {}
pattern = re.compile(r'NUM-(\d+)/ID-(\d+)')
for adict in data:
    num, id = re.findall(pattern, adict['object'])[0]
    result.setdefault(num, []).append(int(id))

print(result)

Output:

{'13': [16, 4], '131': [12, 11], '132': [9, 8]}
Related