9

こんにちは、各キーが顧客名で、各値が各顧客が購入するタプルのリストである辞書を作成しています。たとえば、(製品、数量) です。例えば:

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

SQL クエリの結果に基づいて辞書を作成しています。Python を初めて使用する Java プログラマーとして、誰かがこれを行うための「pythonic」な方法を提案できますか? クエリの各行には、顧客名、製品、数量が含まれています。

4

5 に答える 5

13

まず第一に、辞書エントリとしてタプルではなくリストを使用します。主な違いは、リストは変更可能ですが、タプルは変更できないことです。

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)]}
于 2012-05-15T13:26:22.703 に答える
2

構造は同種であるため、内部構造はタプルではなくリストにする必要があります。

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

これにより.append()、それらに対して を使用することもできますcollections.defaultdict。さらに単純化するために、空のリストで各値を開始するために を使用できます。

于 2012-05-15T13:26:19.530 に答える
1

データベースからリストのリストがあることを願っています。

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

その後、簡単に行うことができます。

for row in rows:
    cust_dict[row[0]] = row[1:]
于 2012-05-15T13:23:33.263 に答える
1

これが私がすることです

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)]}
于 2012-05-15T13:25:35.430 に答える
0

組み込みのdefaultdictを使用してリストとしてインスタンス化し、ループ内で必要なフィールドを追加できます。最初の要素を除く行全体が必要な場合は、your_defaultdict_instance[row[0]].append(row[1:])すべてをきちんと構築できます。

于 2012-05-15T13:27:02.007 に答える