2016-04-16 19 views
1

私は現在、ネストされたリストで、この辞書を持っている:Pythonでネストされたリストの辞書を単純化するには?

dict_with_nested_list = { 
    'B': [['a', 2], ['b', 4]], 
    'A': [['a', 1], ['b', 3]] 
} 

correct_order = ['A', 'B'] 

各ネストされたリストが正しい順序であり、その要素はキーとその対応する値になるように、私は、それを簡素化しようとしている:

desired_output = [ 
    ['a', 1, 2], 
    ['b', 3, 4] 
] 

答えて

3
from collections import OrderedDict 

ret = OrderedDict() 
for order in correct_order: 
    for key, value in dict_with_nested_list[order]: 
     if key not in ret: 
      ret[key] = [] 
     ret[key].append(value) 

print [[key] + value for key, value in ret.items()] 
3

各値にlistという辞書構造を保持することを強くお勧めします。必要に応じて、後で別の構造に変換することができます。あなたが好きなあなたの所望の出力にその辞書を回すことができる

{'a': [1, 2], 'b': [3, 4]} 

>>> import collections 
>>> dict_with_nested_list = { 
...  'B': [['a', 2], ['b', 4]], 
...  'A': [['a', 1], ['b', 3]] 
... } 
>>> result = collections.defaultdict(list) 
>>> for l in dict_with_nested_list.values(): 
...  for k,v in l: 
...    result[k].append(v) 
... 
>>> result = {k:sorted(v) for k,v in result.items()} 
>>> result 
{'b': [3, 4], 'a': [1, 2]} 
>>> sorted(result.items()) 
[('a', [1, 2]), ('b', [3, 4])] 
>>> [[k]+v for k,v in sorted(result.items())] 
[['a', 1, 2], ['b', 3, 4]] 
1

あなたがこの辞書になり、この

from collections import defaultdict 

dict_output = defaultdict(list) 
for key, list_of_pairs in sorted(dict_with_nested_list.items()): 
    for lowerkey, value in list_of_pairs: 
     dict_output[lowerkey].append(value) 

print(dict(dict_output)) 

のように合理的な辞書にそれを回すことができますこれは:

desired_output = [[key] + values for key, values in sorted(dict_output.items())] 

print(desired_output) 

この結果、

[['a', 1, 2], ['b', 3, 4]] 
関連する問題