我一直在尝试创建凯文培根游戏,我想我差不多完成了。但是我在从某些文件构建图表时遇到问题。有三个文件,一个具有actor id然后是actor名称的actor文件,一个具有movie id和movie name的movie文件,以及一个具有movie id和actor id的movie-actor文件。
这些是我创建的测试文件:
注意:打开这些文件时,您可能需要指定编码,以便Python不会崩溃:例如打开(r“actors.txt”,“r”,encoding =“latin-1”)
我想使用这些文件来创建一个顶点是actor名称的图形。
喜欢如此:
顶点: “Kevin Bacon”,“actor1”,“actor2”,“actor3”,“actor4”,“actor5”,“actor6”]
边缘是由第一个演员,第二个演员和电影片名组成的元组。
像这样:
边缘:
(“Kevin Bacon”,“actor1”,“movie1”)
(“Kevin Bacon”,“actor2”,“movie1”)
(“actor1”,“actor2”,“movie1”)
(“actor1”,“actor3”,“movie2”)
(“actor3”,“actor2”,“movie3”)
(“actor3”,“actor4”,“movie4”)
(“actor5”,“actor6”,“movie5”)
到目前为止,这是我的代码:
with open('actorsTest.txt') as file:
actors = [l.strip().split('|') for l in file]
#print(actors)
with open('moviesTest.txt') as file:
movies = [l.strip().split('|') for l in file]
#print(movies)
with open('movie-actorsTest.txt') as file:
movie_actors = [l.strip().split('|') for l in file]
#print(movie_actors)
ma_dict = {}
for i in range(len(movie_actors)):
if movie_actors[i][0] not in ma_dict.keys():
ma_dict[movie_actors[i][0]] = []
for i in range(len(movie_actors)):
ma_dict[movie_actors[i][0]].append(movie_actors[i][1])
print(ma_dict)
a_dict = {d[0]: d[1:] for d in actors}
print(a_dict)
m_dict = {d[0]: d[1:] for d in movies}
print(m_dict)
## These code chunks below this statement do not work, they are my attempt
## at trying to combine the dictionaries to get the edges to be in the
## correct format.
edges = []
for k, v in ma_dict:
for i in range(len(v)-1):
edges.append((a_dict[v[i]], a_dict[v[i+1]], m_dict[k]))
print(edges)
我能够打开文件,逐行解析它们,并创建三个不同的词典。 actors字典将actor id作为键,将actor名称作为值。电影字典将电影ID作为键,电影名称作为值。 movie_actors字典将movie id作为键,并将actor id列表作为值。
如果您希望查看这些文件,可以使用以下实际的actor,movie和movie-actors文件。这些是我将实际运行代码的文件,并创建图表来说明Kevin Bacon的游戏。其他的只是我制作的一些测试文件。
我一直在困惑如何将这三者组合在一起制作边缘和顶点,但到目前为止还没有成功。我感觉它并不那么难,而且有些东西我只是没有看到。
感谢任何建议。
感谢您的时间,如果您需要更多信息,代码段或任何问题,请与我联系。