我想反驳一下这个词典:
{1: {1: '[]', 2: '[1]'}, 2: {1: '[]', 3: '[1]'}, 3: {1: '[]'}}
想象一下,这是一个有顶点1, 2, 3
的有向图,标有1 -> 1
的边标,标签为'[]'
,由1: {1: '[]'
以字典形式表示。标签不必是字符串,它们只能是列表。
我想要反转边缘并保持标签不变。 我想要的输出是:
{1: {1:'[]', 2:'[]', 3:'[]'}, 2: {1:'[1]'}, 3:{2:'[1]'}}
我看到了一些像Python reverse / invert a mapping这样的方法,但它们都适用于没有"标签的简单字典#34;
答案 0 :(得分:0)
只需迭代子词典及其中的键,然后将它们添加到新词典中,并将第一个和第二个键反转。
d = {1: {1: '[]', 2: '[1]'}, 2: {1: '[]', 3: '[1]'}, 3: {1: '[]'}}
p = {}
for from_, subdict in d.iteritems():
for to, value in subdict.iteritems():
p.setdefault(to, {})
p[to][from_] = value
print p
或者使用defaultdict
,即p = collections.defaultdict(dict)
,那么您就不需要p.setdefault(to, {})
行。
之后,p
为{1: {1: '[]', 2: '[]', 3: '[]'}, 2: {1: '[1]'}, 3: {2: '[1]'}}