Django将列表转换为一个列表

时间:2015-06-28 17:57:56

标签: python django

我想将这些数据放入一个列表中,以便按时间戳对其进行排序。我尝试过itertools链,但这并没有真正起作用。 谢谢你的帮助:)

我很清楚我想要做什么,所以我很抱歉,如果这需要一些解释。

如果我尝试连锁,我会像这样得到价值。

我想在html页面上显示它,如下所示:

日期,姓名,评级,文字(换行符) 喜欢评论

哪种方式可以按我的方式工作,但如果我想按时间排序,它就行不通,所以我试着想办法把它变成一个可排序的列表。哪个可以显示。那可以理解吗?

['Eva Simia','Peter Alexander',{'scale':5,'value':5},{'scale':5,'value':5},1,0,1,0]

它应该如下所示: ['彼得亚历山大,比例:5,价值:5,1,0] ['Eva Simia,比例:5,价值:5,1,0]

for i in user:
    name.append(i['name'])

for i in next_level:
    rating_values.append(i['rating'])

for i in comment_values:
    comments_count.append(i['count'])

for i in likes_values:
    likes_count.append(i['count'])

for s in rating_values:
    ratings.append(s['value'])

for s in date:
    ratings.append(s['date'])   

ab = itertools.chain([name], [rating_values], 
                     [comments_count], [likes_values],
                     [comment_values], [date])
list(ab)

3 个答案:

答案 0 :(得分:1)

澄清后更新:

我理解的问题是:

  • 您有一个数据集,该数据集被拆分为多个列表,每个字段一个列表。
  • 每个列表都有相同顺序的记录。也就是说,user[x]的评分值必须为rating_values[x]

您需要将该信息合并到单个复合项列表中。您可以使用zip()

merged = zip(user, next_level, comment_values, likes_values, rating_values, date)

# merged is now [(user[0], next_level[0], comment_values[0], ...), 
#                (user[1], next_level[1], comment_values[1], ...), 
#                ...]

从那里,您只需使用sorted()

对列表进行排序即可
result = sorted(merged, key=lambda i: (i[5], i[0]))

key参数必须是函数。列表中的每个项目都被赋予一次,并且必须返回将用于比较项目的密钥。在这里,我们动态构建一个简短的函数,它返回日期和用户名,有效地告诉事情将被排序,首先按日期排序,如果日期相等,则按用户名排序。

[关于itertools.chain的过去答案,在澄清之前]

ab = list(itertools.chain(
    (i['name'] for i in user),
    (i['rating'] for i in next_level),
    (i['count'] for i in comment_values),
    (i['count'] for i in likes_values),
    (i['value'] for i in rating_values),
    (i['date'] for i in date),
))

使用itertools.chain的目的通常是避免不必要的副本和中间对象。为此,您希望传递迭代器。 chain将返回一个迭代器,它将遍历每个给定的迭代器,一次一个迭代器,当当前停止时移动到下一个迭代器。

注意每个迭代器都必须用括号括起来,否则python会抱怨。不要使它成方括号,因为它会导致建立中间列表。

答案 1 :(得分:0)

您只需使用+即可加入列表。

l = name + rating_values + comments_count + ...

答案 2 :(得分:0)

date, rating_values,likes_values,comment_values,next_level,user = (list(t) for t in zip(*sorted(zip(date, rating_values,likes_values,comment_values,next_level,user))))