2016-11-08 14 views
-3

創建的元組此dictionaryPython的 - 從給出的列表

sql_playlists={ 
'user1':{'Karma Police':1.0,'Roxanne':1.0,'Sonnet':1.0,'We Will Rock You':1.0,'Song 1': 1.0}, 
'user2':{'Karma Police':1.0,'Roxanne':1.0,'Sonnet':1.0,'We Will Rock You':1.0,'Song 2': 1.0}, 
'user3':{'Karma Police':1.0,'Roxanne':1.0,'Sonnet':1.0,'We Will Rock You':1.0,'Song 3': 1.0}, 
'user4':{'Karma Police':1.0,'Roxanne':1.0,'Sonnet':1.0,'We Will Rock You':1.0,'Song 4': 1.0}, 
'user5':{'Karma Police':1.0,'Roxanne':1.0,'Sonnet':1.0,'We Will Rock You':1.0,'Song 4': 1.0}} 

我可以創建數據的keysvalues元組是這樣的:

sqltuples = [(k1,k2,v2) for k1,v1 in sql_playlists.items() 
      for k2,v2 in v1.items()] 

,輸出:

[(u'user1', u'Make You Feel My Love', 1.0), (u'user1', u'I See Fire', 1.0), (u'user', u'High And Dry', 1.0), (u'user1', u'Fake Plastic Trees', 1.0), (u'user1', u'One', 1.0), (u'user1', u'Goodbye My Lover', 1.0), (u'user1', u'No Surprises', 1.0)] 

爲每個用戶。

但是如果sql_playlistlist,但數據結構相同但在[]之內,而不是dictionary

編輯:列表

sql_playlists=[{ 
'user1':{'Karma Police':1.0,'Roxanne':1.0,'Sonnet':1.0,'We Will Rock You':1.0,'Song 1': 1.0}, 
'user2':{'Karma Police':1.0,'Roxanne':1.0,'Sonnet':1.0,'We Will Rock You':1.0,'Song 2': 1.0}, 
'user3':{'Karma Police':1.0,'Roxanne':1.0,'Sonnet':1.0,'We Will Rock You':1.0,'Song 3': 1.0}, 
'user4':{'Karma Police':1.0,'Roxanne':1.0,'Sonnet':1.0,'We Will Rock You':1.0,'Song 4': 1.0}, 
'user5':{'Karma Police':1.0,'Roxanne':1.0,'Sonnet':1.0,'We Will Rock You':1.0,'Song 4': 1.0}}] 

我怎麼適應,以便產生從列表中相同tupleslist comprehension

這個工程的第一個用戶:

sqltuples = [(k1,k2,v2) for k1,v1 in sql_playlists[0].items() 
      for k2,v2 in v1.items()] 

,但我想對所有用戶。

+0

你可以顯示列表顯示的內容嗎? –

+0

@PaulRooney我爲你編輯了它 –

+3

你的第二個代碼示例產生與第一個相同的輸出。唯一的區別是整個事情被包裹在一個列表中。所以'sql_playlists [0]'可以讓你看到完全相同的字典對象。 –

回答

0

,如果你的意思是詞典的數組: sql_playlists=[ {'user1':{'Karma Police':1.0,'Roxanne':1.0,'Sonnet':1.0,'We Will Rock You':1.0,'Song 1': 1.0}}, {'user2':{'Karma Police':1.0,'Roxanne':1.0,'Sonnet':1.0,'We Will Rock You':1.0,'Song 2': 1.0}}, {'user3':{'Karma Police':1.0,'Roxanne':1.0,'Sonnet':1.0,'We Will Rock You':1.0,'Song 3': 1.0}}, {'user4':{'Karma Police':1.0,'Roxanne':1.0,'Sonnet':1.0,'We Will Rock You':1.0,'Song 4': 1.0}}, {'user5':{'Karma Police':1.0,'Roxanne':1.0,'Sonnet':1.0,'We Will Rock You':1.0,'Song 4': 1.0}}]

則:

sqltuples = [(k1,k2,v2) for vlist in sql_playlists for k1,v1 in vlist.items() for k2,v2 in v1.items()]

你要注意,這將產生的元組在不同的順序,因爲排序保留列舉清單時,但不dicts

+0

多數民衆贊成它,謝謝 –