2010-11-23 12 views
3

例:Pythonでは、3つのdictを結合し、dictのキーの1つをソートする最も効率的な方法は何ですか?

list1 = {'52': {'timestamp':'1234567890', 'name':'Jason Bourne'}, 
     '42': {'timestamp':'2345678891', 'name':'Sarah Parker'} 
     } 

list2 = {'61': {'timestamp':'3456789012', 'name':'Mike Williams'}, 
     '12': {'timestamp':'4567889123', 'name':'Robert Tissone'} 
     } 

list3 = {'56': {'timestamp':'4567890123', 'name':'Peter Blake'}, 
     '71': {'timestamp':'5678891234', 'name':'Alex Cheng'} 
     } 

//Best way to combine list1, list2, and list3 and sort by timestamp 

result = [ {'timestamp':'1234567890', 'name':'Jason Bourne'}, 
      {'timestamp':'2345678891', 'name':'Sarah Parker'}, 
      {'timestamp':'3456789012', 'name':'Mike Williams'}, 
      {'timestamp':'4567889123', 'name':'Robert Tissone'}, 
      {'timestamp':'4567890123', 'name':'Peter Blake'}, 
      {'timestamp':'5678891234', 'name':'Alex Cheng'} 
     ] 
+0

OPを持つことができるように - あなたは、キーを失うことを気にしないことを確認していますか?もしそうなら、イグナシオの返答は –

+0

にあります。ええ、私は鍵を失うことができます。ありがとう! – ensnare

答えて

8
sorted(itertools.chain(list1.itervalues(), list2.itervalues(), 
    list3.itervalues()), key=operator.itemgetter('timestamp')) 
+2

これが機能するには、itertoolsをインポートする必要があることに注意してください。 –

+2

そして '演算子'。 –

+2

最後に、タイムスタンプは文字列なので、文字列スタイルのソートが得られることに注意してください。 –

0
from itertools import chain 
from operator import itemgetter 

def sortedchain(dicos, key): 
    return sorted(chain(v for d in dicos for v in d.values()), key=itemgetter(key)) 

dicos=[list1, list2, list3] 
sortedvalues = sortedchain(dicos, 'timestamp') 

dicosはどんなな長さ

関連する問題