我有一个字典,其键作为元组,对应于我想重塑它们的顺序:
{(1, 2): 'red',
(3, 2): 'green',
(3, 1): 'orange',
(2, 1): 'blue',
(2, 2): 'yellow',
(1, 1): 'purple'}
应该根据元组的索引将密钥重新整形为嵌套字典:
{1:
{1: 'purple',
2: 'red'},
2:
{1: 'blue',
2: 'yellow'},
3:
{1: 'orange',
2: 'green'}
}
答案 0 :(得分:4)
>>> d = {(1, 2): 'red',
... (3, 2): 'green',
... (3, 1): 'orange',
... (2, 1): 'blue',
... (2, 2): 'yellow',
... (1, 1): 'purple'}
>>> r = {}
>>> for k in d:
... r.setdefault(k[0], {})[k[1]] = d[k]
...
>>> r
{1: {1: 'purple', 2: 'red'}, 2: {1: 'blue', 2: 'yellow'}, 3: {1: 'orange', 2: 'green'}}
这部分:
r.setdefault(k[0], {})
如果存在,则返回r[k[0]]
。否则它会为r[k[0]
]分配一个新的空字典并返回。
让我们称之为返回的词典“somedict”。你有像这样的正常dict分配
somedict[k[1]] = d[k]
答案 1 :(得分:1)
虽然我非常喜欢约翰的方法,但人们也可以采用更保守的代码:
for i,j in d:
if i not in r:
r[i] = {}
r[i][j] = d[(i,j)]
对于阅读代码的其他人(或下周自己;)可能会更容易理解。