2016-10-31 8 views
0

ネストされた辞書をマージ:Pythonの私は、このデータ構造を有する

playlists_user1={'user1':[ 
       {'playlist1':{ 
        'tracks': [   
        {'name': 'Karma Police','artist': 'Radiohead', 'count': 1.0}, 
        {'name': 'Bitter Sweet Symphony','artist': 'The Verve','count': 2.0}      
        ] 
        } 
       }, 
       {'playlist2':{ 
        'tracks': [   
        {'name': 'We Will Rock You','artist': 'Queen', 'count': 3.0}, 
        {'name': 'Roxanne','artist': 'Police','count': 5.0}      
        ] 
        } 
       }, 
       ] 
      } 


playlists_user2={'user2':[ 
       {'playlist1':{ 
        'tracks': [   
        {'name': 'Karma Police','artist': 'Radiohead', 'count': 2.0}, 
        {'name': 'Sonnet','artist': 'The Verve','count': 4.0}      
        ] 
        } 
       }, 
       {'playlist2':{ 
        'tracks': [   
        {'name': 'We Are The Champions','artist': 'Queen', 'count': 4.0}, 
        {'name': 'Bitter Sweet Symphony','artist': 'The Verve','count': 1.0}      
        ] 
        } 
       }, 
       ] 
      } 
Iは、そのようなので、 playlist keyあろう item第単一のデータ構造に2つの入れ子辞書をマージしたい

{'playlist1': {'tracks': [{'count': 1.0, 'name': 'Karma Police', 'artist': 'Radiohead'}, {'count': 2.0, 'name': 'Bitter Sweet Symphony', 'artist': 'The Verve'}]}} 

私が試してみました:

prefs1 = playlists_user1['user1'][0] 
prefs2 = playlists_user2['user2'][0] 
prefs3 = prefs1.update(prefs2) 

無駄に。

どうすれば解決できますか?

答えて

0

プレイリストの値は、すでに一つのキー(あなたは私に言わせれば難読化ビット)と辞書のリストのリストなので:

combined = {} 
for playlist in playlists_user1.values()[0]: 
    combined.update(playlist) 
for playlist in playlists_user2.values()[0]: 
    combined.update(playlist) 

またはあなたがこれらの多くを持っている場合は、リストとmake:

combined = {} 
for playlistlist in user_playlists: 
    for playlist in playlistlist.values()[0]: 
     combined.update(playlist) 
+0

最初の解決策を使用して、私はValueErrorを取得します。辞書更新シーケンス要素#0には長さ1があります。 2が必要です ' –

+0

私は忘れてしまった余分なリスト層を持っています。 – kabanus

関連する問題