给定这样的查询集:
[<'item', 'category1'>, <'item2', 'category1'>, <'item3', 'category2'>]
将其“压缩”到一个字典的 Pythonic 方法是什么,其中常见类别是键,值作为列表?例如
{ 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)