这是我认为您正在努力实现的一个简单示例:
>>> 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创建一个新容器。