【问题标题】:Python - create tuples from listPython - 从列表创建元组
【发布时间】: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}}

我可以像这样创建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}}]

如何调整 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


【解决方案1】:

如果您的意思是字典数组: 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()]

您应该注意,这会以不同的顺序生成元组,因为在枚举列表而不是字典时会保留排序

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多