Hi I'm building a dictionary where each key is a customer name and each value is a list of tuples which are purchased by each customer, like so: (product, quantity). For example:
{'customer1': (('milk', 3), ('bread', 5), ('eggs', 2)),
'customer2': (('cheese', 2), ('cereal', 7))}
I am populating the dictionary based on the results of a SQL query. Being a Java programmer new to Python, can someone suggest the "pythonic" way to do this? Each row from the query contains customer name, product, quantity.
First of all, I'd use lists rather than tuples as dictionary entries. The principal difference is that lists are mutable, whereas tuples are not.
I think defaultdict
is a good for for this problem:
from collections import defaultdict
customers = defaultdict(list)
You can add entries like so (of course in your case you'd do this in a loop):
customers['customer1'].append(('milk', 3))
customers['customer1'].append(('bread', 5))
customers['customer2'].append(('cereal', 7))
The result is:
>>> print dict(customers)
{'customer1': [('milk', 3), ('bread', 5)], 'customer2': [('cereal', 7)]}
Your inner structure should be a list, not a tuple, since the structure is homogenous.
{'customer1': [('milk', 3), ('bread', 5), ('eggs', 2)],
'customer2': [('cheese', 2), ('cereal', 7)]}
This will also allow you to use .append()
on them, and you can use collections.defaultdict
to start off each value with an empty list for further simplification.
Im hoping that you have a list of lists from your database, so e.g.
rows = [('customer1', ('milk', 2)), ('customer12', ('bread', 4))] # etc etc
Then you can simply do.
for row in rows:
cust_dict[row[0]] = row[1:]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With