填充Python字典

时间:2012-05-15 13:20:42

标签: python dictionary

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

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

我根据SQL查询的结果填充字典。作为Python新手的Java程序员,有人可以建议采用“pythonic”方式吗?查询中的每一行都包含客户名称,产品,数量。

5 个答案:

答案 0 :(得分:11)

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

我认为defaultdict对这个问题有好处:

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)]}

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

我希望您有一个数据库列表,例如

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

然后你就可以做到。

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

答案 3 :(得分:0)

这是我要做的事情

from collections import defaultdict

data = (
    ('customer1', 'milk', 3),
    ('customer1', 'bread', 5),
    ('customer1', 'eggs', 2),
    ('customer2', 'cheese', 2),
    ('customer2', 'cereal', 7),
    )

result = defaultdict(list)
for name, what, amount in data:
    result[name].append((what, amount))

from pprint import pprint
result = dict(result)
pprint(result)

打印

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

答案 4 :(得分:0)

您可以使用内置的defaultdict并将其实例化为列表,并在循环中追加您想要的字段,例如。如果你想要除了第一个元素之外的整行,你可以your_defaultdict_instance[row[0]].append(row[1:])整齐地构建所有东西。