在字典中转换2元组键并将其作为字典值添加到新字典中

Jon*_*n C 11 python dictionary tuples

所以我有价值观:

values = {(0, 0): 0, (0, 1): 1, (1, 0): 1, (1, 1): 0}
Run Code Online (Sandbox Code Playgroud)

我想将上面的字典转换为:

values = {0: {0: 0, 1: 1}, 1: {0: 1, 1: 0}}
Run Code Online (Sandbox Code Playgroud)

我的功能:

def convert(values : {(int,int): int}) -> {int: {int: int}}:
    dictionary = {}
    l = []

    for k in d.keys():
        l.append(k)

    for k,v in d.items():
        for i in l:
            if i == k:
                dictionary[v] = dict(l)

    return dictionary
Run Code Online (Sandbox Code Playgroud)

但我把它作为我的输出而是:

values = {0: {0: 1, 1: 1}, 1: {0: 1, 1: 1}}
Run Code Online (Sandbox Code Playgroud)

Ste*_*uch 11

一个循环,dict.setdefault()可以这样做:

码:

values = {(0, 0): 0, (0, 1): 1, (1, 0): 1, (1, 1): 0}

result = {}
for k, v in values.items():
    result.setdefault(k[0], {})[k[1]] = v

print(result)
Run Code Online (Sandbox Code Playgroud)

结果:

{0: {0: 0, 1: 1}, 1: {0: 1, 1: 0}}
Run Code Online (Sandbox Code Playgroud)


jua*_*aga 10

你只想分组.惯用的方法是使用defaultdict:

>>> from collections import defaultdict
>>> values = {(0, 0): 0, (0, 1): 1, (1, 0): 1, (1, 1): 0}
>>> new_values = defaultdict(dict)
>>> for (x,y), v in values.items():
...     new_values[x][y] = v
...
>>> new_values
defaultdict(<class 'dict'>, {0: {0: 0, 1: 1}, 1: {0: 1, 1: 0}})
>>> 
Run Code Online (Sandbox Code Playgroud)