我想将这些数据放入一个列表中,以便按时间戳对其进行排序。我尝试过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)
答案 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))))