このようなクエリセットが与えられた場合:
[<'item', 'category1'>, <'item2', 'category1'>, <'item3', 'category2'>]
これを、共通のカテゴリがキーであり、値がリストであるdictに「zip」するPythonの方法は何ですか?例えば
{ category1: [item, item2], category2: [item3] }
を使用しdefaultdict
ます。キーがディクショナリに存在しない場合、デフォルトで作成されたアイテムが返されます。その下には空のリストが返されるため、存在しないキーを特別に処理せずに各アイテムを追加できます。
from collections import defaultdict
D = defaultdict(list)
data = [('item', 'category1'), ('item2', 'category1'), ('item3', 'category2')]
for item,category in data:
D[category].append(item)
print(D)
出力:
defaultdict(<class 'list'>, {'category2': ['item3'], 'category1': ['item', 'item2']})
私は彼らがよりクリーンなアプローチであると確信していますが、以下は確かに機能するはずです:
qs = [('item', 'category1'), ('item2', 'category1'), ('item3', 'category2')]
for item, cat in qs:
if cat not in cat_dict:
cat_dict[cat] = []
cat_dict[cat].append(item)