Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 组合元组列表中的元素?_Python_Loops_Dictionary_Append_Tuples - Fatal编程技术网

Python 组合元组列表中的元素?

Python 组合元组列表中的元素?,python,loops,dictionary,append,tuples,Python,Loops,Dictionary,Append,Tuples,我正在开发一个程序,该程序接收imdb文本文件,并根据用户输入N输出顶级演员(按电影外观) 然而,我遇到了一个问题,在同样数量的电影中,演员占据了我的位置,这是我需要避免的。相反,如果两个演员在5部电影中,例如,数字5应该出现,演员的名字应该合并,用分号分隔 我已经尝试了多种解决方法,但都没有效果。有什么建议吗 if __name__ == "__main__": imdb_file = raw_input("Enter the name of the IMDB file ==>

我正在开发一个程序,该程序接收imdb文本文件,并根据用户输入N输出顶级演员(按电影外观)

然而,我遇到了一个问题,在同样数量的电影中,演员占据了我的位置,这是我需要避免的。相反,如果两个演员在5部电影中,例如,数字5应该出现,演员的名字应该合并,用分号分隔

我已经尝试了多种解决方法,但都没有效果。有什么建议吗

if __name__ == "__main__":
    imdb_file = raw_input("Enter the name of the IMDB file ==> ").strip()
    print imdb_file
    N= input('Enter the number of top individuals ==> ')
    print N


    actors_to_movies = {}

    for line in open(imdb_file):
        words = line.strip().split('|')
        actor = words[0].strip()
        movie = words[1].strip()
        if not actor in actors_to_movies:
            actors_to_movies[actor] = set()
        actors_to_movies[actor].add(movie)

    movie_list= sorted(list(actors_to_movies[actor])) 

    #Arranges Dictionary into List of Tuples#
    D = [ (x, actors_to_movies[x]) for x in actors_to_movies]
    descending = sorted(D, key = lambda x: len(x[1]), reverse=True)

    #Prints Tuples in Descending Order N number of times (User Input)#
    for i in range(N):
        print str(len(descending[i][1]))+':', descending[i][0]
有一个有用的方法

它允许您按某个键将列表拆分为多个组。使用它,您可以轻松编写打印顶级角色的函数:

import itertools
def print_top_actors(actor_info_list, top=5):
    """
    :param: actor_info_list should contain tuples of (actor_name, movie_count)
    """
    actor_info_list.sort(key=lambda x: x[1], reverse=True)
    for i, (movie_count, actor_iter) in enumerate(itertools.groupby(actor_info_list)):
        if i >= top:
            break
        print movie_count, ';'.join(actor for actor, movie_count in actor_iter)
用法和示例:

>>> print_top_actors(
...     [
...         ("DiCaprio", 100500),
...         ("Pitt", 100500),
...         ("foo", 10),
...         ("bar", 10),
...         ("baz", 10),
...         ("qux", 3),
...         ("lol", 1)
...     ], top = 3)
100500 DiCaprio;Pitt
10 foo;bar;baz
3 qux
有一个有用的方法

它允许您按某个键将列表拆分为多个组。使用它,您可以轻松编写打印顶级角色的函数:

import itertools
def print_top_actors(actor_info_list, top=5):
    """
    :param: actor_info_list should contain tuples of (actor_name, movie_count)
    """
    actor_info_list.sort(key=lambda x: x[1], reverse=True)
    for i, (movie_count, actor_iter) in enumerate(itertools.groupby(actor_info_list)):
        if i >= top:
            break
        print movie_count, ';'.join(actor for actor, movie_count in actor_iter)
用法和示例:

>>> print_top_actors(
...     [
...         ("DiCaprio", 100500),
...         ("Pitt", 100500),
...         ("foo", 10),
...         ("bar", 10),
...         ("baz", 10),
...         ("qux", 3),
...         ("lol", 1)
...     ], top = 3)
100500 DiCaprio;Pitt
10 foo;bar;baz
3 qux

如果将所有代码嵌套在
if\uuuuu name\uuuu==“\uuuuu main\uuuu”:
意味着如果文件由另一个脚本导入,则其任何功能都无法访问。如果将所有代码嵌套在
if\uuuuuu name\uuuuu==“\uuuuuuuu main\uuu”下:
意味着如果文件由另一个脚本导入,它的任何功能都将无法访问。两件事:在示例中,您调用top_Actors,即使您定义了print_top_Actors,您也会在注释中说actor_info_list元组顺序应该是movie_count、actor name、,然而,在这个例子中,演员的名字排在电影的前面。按原样运行代码会返回一个样式为:(Actorname,moviecount)Actorname的列表,对我来说根本不会组合演员名称。我很抱歉。修复了示例和注释。正确的调用方式如示例所示,尽管您可以随时更改它,但只需更改
排序中的
/
分组方式
两件事:您在示例中调用顶级演员,即使您定义了打印顶级演员,您在注释中也会说演员信息列表元组顺序应该是电影计数、演员名称,然而,在这个例子中,演员的名字排在电影的前面。按原样运行代码会返回一个样式为:(Actorname,moviecount)Actorname的列表,对我来说根本不会组合演员名称。我很抱歉。修复了示例和注释。正确的调用方式如示例所示,尽管您可以随时更改它,但只需在
排序中更改