这是我认为您正在努力实现的一个简单示例:
>>> rows = [[1,2,3], [1,2,4], [1,3,3], [1,3,5], [2,3,9], [2,3,5]]
>>> ret = {}
>>> for row in rows:
... ret.setdefault(row[0], {}).setdefault(row[1], []).append(row[2])
...
>>> ret
{1: {2: [3, 4], 3: [3, 5]}, 2: {3: [9, 5]}}
它是如何工作的?对于每个row
:
- 找钥匙
row[0]
。_ ret
如果它不存在,我们将它添加(row[0], {})
到字典中,{}
作为嵌套字典。它存在,我们继续。
- 该值
row[1]
是嵌套字典的键。我们在ret[row[0]]
(第一次setdefault
返回)中查找它:如果它不存在,我们添加一个空列表。
- 我们将值添加
row[2]
到列表中ret[row[0]][row[1]]
请记住:
ret.setdefault(row[0], value_if_absent).func()
方法:
if row[0] not in ret:
ret[row[0]] = value_if_absent
ret[row[0]].func()
Usaully,value_if_absent
是一个容器,func
是append
, extend
, update
, ... 方法之一。但如果需要,func
也可以setdefault
创建一个新容器。