我有这本词典
{
'eth1': {
'R2': bw1,
'R3': bw3
},
'eth2': {
'R2': bw2,
'R3': bw4
}
}
我想把它变成这本词典
{
'R2': {
'eth1': bw1,
'eth2': bw2,
},
'R3': {
'eth1': bw3,
'eth2': bw4
}
}
有没有一种巧妙的方法呢?
答案 0 :(得分:1)
您可以使用嵌套循环浏览字典,并使用setdefault
更新键/值来构建新字典。
d={
'eth1': {
'R2': 'bw1',
'R3': 'bw3'
},
'eth2': {
'R2': 'bw2',
'R3': 'bw4'
}
}
result = {}
for k, v in d.iteritems():
for a,b in v.iteritems():
result.setdefault(a, {}).update({k:b})
print result
输出:
{'R2': {'eth2': 'bw2', 'eth1': 'bw1'}, 'R3': {'eth2': 'bw4', 'eth1': 'bw3'}}
您可以在列表推导中使用嵌套循环来编写较小的解决方案,并且它会产生相同的结果。
result = {}
res= [result.setdefault(a, {}).update({k:b}) for k, v in d.iteritems() for a,b in v.iteritems()]
print result
#Output: {'R2': {'eth2': 'bw2', 'eth1': 'bw1'}, 'R3': {'eth2': 'bw4', 'eth1': 'bw3'}}
答案 1 :(得分:0)
不确定为什么要投票,这不是一件容易的事。像这样的老实说嵌套词典是PITA。这将有效:
d1 = {
'eth1': {
'R2': bw1,
'R3': bw3
},
'eth2': {
'R2': bw2,
'R3': bw4
}
}
>>> d2 = {}
>>> for k1, v1 in d1.items():
... for k2, v2 in v1.items():
... if k2 not in d2:
... d2[k2] = {}
... d2[k2][k1] = v2
...
>>> d2
{'R2': {'eth2': 'bw2', 'eth1': 'bw1'}, 'R3': {'eth2': 'bw4', 'eth1': 'bw3'}}