【发布时间】:2017-03-21 12:56:39
【问题描述】:
鉴于此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}}
我可以像这样创建keys和values的数据元组:
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_playlist 是list,相同的数据结构,但在[] 内部,而不是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}}]
如何调整 list comprehension 以便从列表中生成相同的 tuples?
这适用于第一个用户:
sqltuples = [(k1,k2,v2) for k1,v1 in sql_playlists[0].items()
for k2,v2 in v1.items()]
但我想要所有用户。
【问题讨论】:
-
你能展示一下列表的样子吗?
-
@PaulRooney 我已经为你编辑好了
-
您的第二个代码示例产生与第一个相同的输出。唯一的区别是整个事情都包含在一个列表中。所以
sql_playlists[0]让你得到完全相同的字典对象。 -
@PaulRooney 第一个代码示例为所有用户生成元组,第二个仅为第一个用户生成元组。
-
您提供的 NEW 列表与包含在列表中的 dict 相同(如在单个字典作为条目的列表中),如果是这种情况,那么您已经自己给出了答案 :)
标签: python list dictionary tuples list-comprehension