2017-04-17 53 views
3

我有一个字典:蟒:切换词典键结构

d = {'a1':{'b1':1, 'b2':2}, 'a2':{'b1':3, 'b2':4}}`. 

我想切换的词典的ab密钥。换句话说,我想要得到的字典是:

dd = {'b1':{'a1':1, 'a2':3}, 'b2':{'a1':2, 'a2':4}} 

没有使用循环。

这里是我现在使用循环:

d = {'a1':{'b1':1, 'b2':2}, 'a2':{'b1':3, 'b2':4}} 
from collections import defaultdict 
dd=defaultdict(dict) 

for k in d.keys(): 
    for tmp_k in d.get(k).keys(): 
     dd[tmp_k][k] =d[k][tmp_k] 
print dict(dd) 

这能做成一条线?

+1

什么是你的问题?你有没有试过解决方案? – Dmitry

+0

你有没有这个工作_with_循环第一?对于一般情况来说,这并不是那么简单,我认为它可能无法被理解为单线型tbh。 – roganjosh

+0

'd [“a1”]'和'd [“a2”]'词典的键是否总是相同?或者他们可以不同? – user69453

回答

1

我认为你的意思是without for loops你的意思是理解。这是一个可能性:

代码:

这可以被压缩成一条线,但我认为两行是有点更清晰,可能不会少得多高性能。

import itertools as it 

d = {'a1': {'b1': 1, 'b2': 2}, 'a2': {'b1': 3, 'b2': 4}} 

new_keys = set(it.chain.from_iterable(i.keys() for i in d.values())) 
new_dict = {k: {i: v[k] for i, v in d.items()} for k in new_keys} 

print(new_dict) 

结果:

{'b1': {'a1': 1, 'a2': 3}, 'b2': {'a1': 2, 'a2': 4}}