Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Append dict to list of dicts with counter

I have this code:

def create_list(order_list):
    items_list = []
    for order in order_list:
        for o in order['items']:
            items_list.append(
                {'orderId': order['orderId'], 'name': o['name']} # add count of o['name']
            )
    
    return items_list
    
    
orders = [{'orderId': '1', 'items': 
            [
                {'name': 'sample', 'other_params': '1'}, 
                {'name': 'sample2', 'other_params': '2'}, 
                {'name': 'sample3', 'other_params': '3'}, 
                {'name': 'sample'}
            ]
        }]

tryme = create_list(orders)

print(tryme)

And the output is:

[{'orderId': '1', 'name': 'sample'}, {'orderId': '1', 'name': 'sample2'}, {'orderId': '1', 'name': 'sample3'}, {'orderId': '1', 'name': 'sample'}]

But the {'orderId': '1', 'name': 'sample'} repeated. How do I make it so that it doesn’t repeat and also be able to print the count of the occurrences of each dict.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

For example instead of having two {'orderId': '1', 'name': 'sample'}, I can just have {'orderId': '1', 'name': 'sample', 'count': 2}.

Also, is there a way to remove the nested for-loop?

>Solution :

You didn’t mentioned anything about what happens to the other_params, so I just ignored them and converted your orders into the format you wanted.

def convert_list(input_list):
  # Initialize an empty output list
  output_list = []

  # Iterate over the input list
  for item in input_list:
    # Get the order ID
    order_id = item['orderId']

    # Iterate over the list of items
    for i in item['items']:
      # Check if the current item is already in the output list
      exists = False
      for j in output_list:
        if j['name'] == i['name']:
          # If it exists, increment the count and set the flag
          j['count'] += 1
          exists = True
      if not exists:
        # If the item doesn't exist, add it to the output list with a count of 1
        output_list.append({'orderId': order_id, 'name': i['name'], 'count': 1})

  # Return the output list
  return output_list
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading