0

PROBLEM :

[
{'field_id': u'36908'},{'field_name': u'Code'},{'field_value': u'900321'},
{'field_id': u'36909'},{'field_name': u'Description'}, {'field_value': u'TIG 2.4MM TUNGSTEN (EACH ROD)'},
{'field_id': u'36910'}, {'field_name': u'Quantity'}, {'field_value': u'2'},
{'field_id': u'36911'}, {'field_name': u'Price'}, {'field_value': u'21.00'}, 
{'field_id': u'36912'}, {'field_name': u'Line Total'}, {'field_value': u'42.00'}, 

{'field_id': u'36908'}, {'field_name': u'Code'}, {'field_value': u'92.01.15.08'}, 
{'field_id': u'36909'}, {'field_name': u'Description'}, {'field_value': u'BINZEL .8MM MIG TIPS MB15'},
{'field_id': u'36910'}, {'field_name': u'Quantity'}, {'field_value': u'6'}, 
{'field_id': u'36911'}, {'field_name': u'Price'}, {'field_value': u'2.60'},
{'field_id': u'36912'}, {'field_name': u'Line Total'}, {'field_value': u'15.60'}]

Needed OUTPUT :

[
{'Code':u'900321',
'Description':u'TIG 2.4MM TUNGSTEN (EACH ROD)',
'Quantity':u'2',
'Price':u'21.00',
'Line Total': u'42.00'},

{'Code':u'92.01.15.08',
'Description': u'BINZEL .8MM MIG TIPS MB15',
'Quantity':u'6',
'Price':u'2.60',
'Line Total': u'15.60'}]

I have tried to get my solution in below way but not getting proper result.

first_list_dict=
[{'field_id': u'36908'}, {'field_name': u'Code'}, {'field_value': u'900321'}, {'field_id': u'36909'}, {'field_name': u'Description'}, {'field_value': u'TIG 2.4MM TUNGSTEN (EACH ROD)'}, {'field_id': u'36910'}, {'field_name': u'Quantity'}, {'field_value': u'2'}, {'field_id': u'36911'}, {'field_name': u'Price'}, {'field_value': u'21.00'}, {'field_id': u'36912'}, {'field_name': u'Line Total'}, {'field_value': u'42.00'}, {'field_id': u'36908'}, {'field_name': u'Code'}, {'field_value': u'92.01.15.08'}, {'field_id': u'36909'}, {'field_name': u'Description'}, {'field_value': u'BINZEL .8MM MIG TIPS MB15'}, {'field_id': u'36910'}, {'field_name': u'Quantity'}, {'field_value': u'6'}, {'field_id': u'36911'}, {'field_name': u'Price'}, {'field_value': u'2.60'}, {'field_id': u'36912'}, {'field_name': u'Line Total'}, {'field_value': u'15.60'}]

new_dict={}

for l in first_list_dict:
     new_dict.update({l.get('field_name'):l.get('field_value')})

But I got some None result value in my dictionary output :

{u'Code': None, u'Description': None, u'Price': None, None: u'15.60', u'Line Total': None, u'Quantity': None}
DASADIYA CHAITANYA
  • 2,850
  • 3
  • 18
  • 41

1 Answers1

1

Notes:

  • using python generator function method to iterate over the list
  • Having temporary variables to count and store temporary data
  • using dictionary update and get methods

Code:

lst=[
{'field_id': u'36908'},{'field_name': u'Code'},{'field_value': u'900321'},
{'field_id': u'36909'},{'field_name': u'Description'}, {'field_value': u'TIG 2.4MM TUNGSTEN (EACH ROD)'},
{'field_id': u'36910'}, {'field_name': u'Quantity'}, {'field_value': u'2'},
{'field_id': u'36911'}, {'field_name': u'Price'}, {'field_value': u'21.00'},
{'field_id': u'36912'}, {'field_name': u'Line Total'}, {'field_value': u'42.00'},
{'field_id': u'36908'}, {'field_name': u'Code'}, {'field_value': u'92.01.15.08'},
{'field_id': u'36909'}, {'field_name': u'Description'}, {'field_value': u'BINZEL .8MM MIG TIPS MB15'},
{'field_id': u'36910'}, {'field_name': u'Quantity'}, {'field_value': u'6'},
{'field_id': u'36911'}, {'field_name': u'Price'}, {'field_value': u'2.60'},
{'field_id': u'36912'}, {'field_name': u'Line Total'}, {'field_value': u'15.60'}]

new_lst=[] # List to save output
dic={} # Temporary dictionary to create output dictionary 
count=0 # Count variable to count the list element
def iterating_list(lst): # Function to iterate over list
    for value in lst:
        yield value
iterating=iterating_list(lst)

for value in iterating :
    if value.get('field_name'): # If `field_name` matches in the given lists 
    #By default get method return `None` when there is no given key
        dic.update({value.get('field_name'):next(iterating).get('field_value')})
        count+=1
    if count==5: # Resetting when count reaches to 5 
        count=0
        new_lst.append(dic)
        dic={}
print new_lst

Output:

[{u'Price': u'21.00', u'Code': u'900321', u'Description': u'TIG 2.4MM TUNGSTEN (EACH ROD)', u'Line Total': u'42.00', u'Quantity': u'2'},
{u'Price': u'2.60', u'Code': u'92.01.15.08', u'Description': u'BINZEL .8MM MIG TIPS MB15', u'Line Total': u'15.60', u'Quantity': u'6'}]
Community
  • 1
  • 1
The6thSense
  • 8,103
  • 8
  • 31
  • 65