将列表简化为列表字典

Col*_*lin 0 python python-3.x

我从我的数据库中提取了一堆行,其中许多行共享一个相似的 ID。我想将具有相同 ID 的那些分组到一个列表中,并生成一个从 ID 映射到结果列表的映射。我有以下代码,但似乎必须有一种更简单的方法来使用reduce或字典理解:

result = {}
for row in rows:
  type_id = row['type_id']
  values = result.get(type_id, [])
  values.append(row)
  result[type_id] = values
Run Code Online (Sandbox Code Playgroud)

AKX*_*AKX 5

collections.defaultdict 是你的朋友。

collections.defaultdict(list)list当您索引到 defaultdict 时,将自动为每个键创建新的s,所以您只需要:

import collections

result = collections.defaultdict(list)
for row in rows:
  result[row['type_id']].append(row)
Run Code Online (Sandbox Code Playgroud)