2017-08-02 130 views
-4

我正在学习python,并尝试使用web.py创建一个自己使用的电影集合。蟒蛇 - 比较两个列表

我有两个列表

movies_all = ["abc","xyz","opq"] 
movies_watched = ["xyz","pqr","cba"] 

我想要做的是打印最终输出movies_all的所有行。 这样,如果在列表movies_watched中存在匹配,则输出是或否。例如,在上面只有“xyz”是常见的。

优选地,输出应该是单个数据类型,例如“列表列表”或字典或元组列表等。 其目的是在如下所示的html表格中显示输出。

输出:

 
================ 
Movies| Watched | 
------|---------| 
abc |No  | 
xyz |Yes  | 
opq |No  | 

表输出仅用于提高可读性,实际上是不需要的。

我都试过,但通过迭代一个列表

matches=[] 
print "start comparing" 
for item_a in movies_all: 
    for item_b in movies_watched: 
     if item_a == item_b: 
      matches.append(item_a) 
      matches.append("Yes") 
      #result=zip(movies_all,matches) -> Tried this but not getting desired output 

for i in range(4): 
    print("%s, %s" % (movies_all[i],matches)) 
+10

你应该发布自己的编码尝试,否则你的问题会吸引downvotes。提示:要有效地做到这一点,'movies_watched'应该是'set'。 –

+0

使用某人发布的答案,然后执行:将pandas导入为pd,d = {'movies':movies},df = pd.DataFrame(data = d) – sera

+0

@ PM2Ring感谢您通知我,我的第一篇文章中添加了我的代码失败 – Bharat

回答

1

不能够输出期望的结果与for...in...和比较其他列表与in。通过创建一个空字典并为每个新密钥分配一个值来建立你的字典。在你的例子中,你将拥有一个关于movies_all中每个项目的键。

movies={} 
for movie in movies_all: 
    if movie in movies_watched: 
     movies[movie] = "yes" 
    else: 
     movies[movie] = "no" 
+0

@Bharat然后做:导入熊猫作为PD,D = {'看过':电影},DF = pd.DataFrame(数据= D) – sera

+0

@ bennett-brown谢谢你看起来像我是什么寻找。我能得到movies.iteritems所需的输出 >>>关键,值(): \t打印( “%s%S” %(键,值)) \t XYZ是 ABC没有 opq no – Bharat

+0

是否可以保留movies_all的顺序,因为我发现在打印这些值时订单发生了变化。例如具有较大movies_all列表中的顺序不同于原: QWE没有 XYZ是 ABC没有 124没有 OPQ没有 – Bharat