2015-10-30 4 views
2

J'ai un dictionnaire qui ressemble ci-dessous:Transformer dict en 2 dict clé

{'AL': {'FL': 1, 'GA': 0, 'MS': 0, 'TN': 0}, 
'AR': {'LA': 0, 'MO': 0, 'MS': 0, 'OK': 0, 'TN': 16, 'TX': 0} 
...} 

Je voudrais le transformer en un dictionnaire à deux paires clé.

FlowDict[('AL','FL')] retours {('AL','FL'): 1)}

J'ai vu cette autre stack et a essayé de le mettre en œuvre comme suit: {i.pop('AL'): i for i in FlowDict}. Mais je ne pense pas que ce soit la direction que je dois suivre. Appréciez toute aide.

Répondre

4

Une compréhension dictionnaire imbriqué est ici à portée de main:

>>> FlowDict = {(key1,key2):value for key1 in d for key2,value in d[key1].items()} 
>>> FlowDict 
{('AL', 'FL'): 1, 
('AL', 'GA'): 0, 
('AL', 'MS'): 0, 
('AL', 'TN'): 0, 
('AR', 'LA'): 0, 
('AR', 'MO'): 0, 
('AR', 'MS'): 0, 
('AR', 'OK'): 0, 
('AR', 'TN'): 16, 
('AR', 'TX'): 0} 
1

Qu'est-ce que vous avez dans votre question sera de travail pas tout à fait. Cela va juste fusionner les dicts.

Cependant, une compréhension du dictionnaire imbriqué, travaillera pour vous:

test = {'AL': {'FL': 1, 'GA': 0, 'MS': 0, 'TN': 0}, 
'AR': {'LA': 0, 'MO': 0, 'MS': 0, 'OK': 0, 'TN': 16, 'TX': 0}} 

flattened = {(main_key, sub_key): value for main_key, sub_dict in test.items() for sub_key, value in sub_dict.items()} 
print(flattened)