填充Python字典

2024-05-14 02:05:14 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我正在构建一个字典,其中每个键都是一个客户名称,每个值都是每个客户购买的元组列表,比如:(产品,数量)。例如:

{'customer1': (('milk', 3), ('bread', 5), ('eggs', 2)),
 'customer2': (('cheese', 2), ('cereal', 7))}

我正在根据SQL查询的结果填充字典。作为一个对Python还不熟悉的Java程序员,有人能推荐一下“pythonic”的方法吗?查询的每一行都包含客户名称、产品、数量。


Tags: 名称列表sql数量客户字典产品eggs
3条回答

你的内部结构应该是一个列表,而不是一个元组,因为结构是同质的。

{'customer1': [('milk', 3), ('bread', 5), ('eggs', 2)],
 'customer2': [('cheese', 2), ('cereal', 7)]}

这还允许您对它们使用.append(),并且可以使用collections.defaultdict以空列表开始每个值,以便进一步简化。

我希望你有一个列表从你的数据库,所以例如

rows = [('customer1', ('milk', 2)), ('customer12', ('bread', 4))] # etc etc

然后你就可以做了。

for row in rows:
    cust_dict[row[0]] = row[1:]

首先,我使用列表而不是元组作为字典条目。主要的区别在于列表是可变的,而元组不是可变的。

我认为^{}是解决这个问题的好方法:

from collections import defaultdict

customers = defaultdict(list)

您可以像这样添加条目(当然,在您的情况下,您将在循环中这样做):

customers['customer1'].append(('milk', 3))
customers['customer1'].append(('bread', 5))
customers['customer2'].append(('cereal', 7))

结果是:

>>> print dict(customers)
{'customer1': [('milk', 3), ('bread', 5)], 'customer2': [('cereal', 7)]}

相关问题 更多 >