通过元组键重塑字典

时间:2016-02-16 22:54:00

标签: python dictionary

我有一个字典,其键作为元组,对应于我想重塑它们的顺序:

{(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'}
 }

2 个答案:

答案 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)]

对于阅读代码的其他人(或下周自己;)可能会更容易理解。