我有一个字典,里面有电影和电影中的演员的列表,我试着写两个函数:一个查找任何两个电影中的所有演员,另一个只查找两部电影中的演员。这就是我所拥有的:
def allActors(movie1,movie2):
dictionary1=makeDictionaryFromFile()
actor1=[]
actor2=[]
if movie1 in dictionary1.keys() and movie2 in dictionary1.keys():
actor1=dictionary1[movie1]
actor2=dictionary1[movie2]
return actor1+actor2
def actorsOverlap(movie1,movie2):
dictionary1=makeDictionaryFromFile()
actor1=[]
actor2=[]
if movie1 in dictionary1.keys() and movie2 in dictionary1.keys():
actor1=dictionary1[movie1]
actor2=dictionary1[movie2]
actors=[]
for name in actor1:
if name in actor2:
actors=actors.append([name])
return actors
字典是这样的:
^{pr2}$所以第一个应该给出:
['Daniel Radcliffe', 'Emma Thompson', 'Alan Rickman','Emma Thompson', 'Alan Rickman', 'Hugh Grant']
(我还没弄明白如何让“艾玛·汤普森”和“艾伦·里克曼”只打印一次)
第二个应该给出:
['Emma Thompson', 'Alan Rickman']
这是一个较长项目的一部分,目前看起来是这样的(包括建议的编辑):
from Myro import *
def makeDictionaryFromFile():
dictionary1={}
try:
infile = open("films.txt","r")
nextLineFromFile = infile.readline().rstrip('\r\n')
while (nextLineFromFile != ""):
line = nextLineFromFile.split(",")
first=line[0]
dictionary1[first]=line[1:]
nextLineFromFile = infile.readline().rstrip('\r\n')
except:
print ("File not found! (or other error!)")
return dictionary1
def makeReverseDictionary():
dictionary1 ={}
dictionary1 = makeDictionaryFromFile()
dictionary2 = {}
for k,vlist in dictionary1.iteritems():
for v in vlist:
dictionary2.setdefault(v,[]).append(k)
return dictionary2
def allActors(movie1,movie2):
dictionary1 = makeDictionaryFromFile()
if movie1 in dictionary1.keys() and movie2 in dictionary1.keys():
return list(set(dictionary1[movie1]+ dictionary1[movie2]))
return None
def actorsOverlap(movie1,movie2):
dictionary1 = makeDictionaryFromFile()
if movie1 in dictionary1.keys() and movie2 in dictionary1.keys():
return list(set(dictionar1.values) & set(dictionary2.values()))
def coactors(actor):
dictionary2 = makeDictionaryFromFile()
(some code)
def menu():
answer=askQuestion("choose one",["create actor-title dictionary", "create title-actor dictionary", "find all actors in two movies", "find all overlapping actors in two movies","find all actors not in both movies","find all co-actors of an actor","Nothing, I wish to quit"])
if answer == ("create actor-title dictionary"):
answer = 1
elif answer == ("create title-actor dictionary"):
answer = 2
elif answer == ("find all actors in two movies"):
answer = 3
elif (answer == "find all overlapping actors in two movies"):
answer = 4
elif (answer == "find all co-actors of an actor"):
answer = 5
elif (answer == "Nothing, I wish to quit"):
answer = 6
return answer
def main():
choice = menu()
while (choice != 6):
if (choice == 1):
dictionary=makeDictionaryFromFile()
print (dictionary)
elif (choice == 2):
dictionary=makeReverseDictionary()
print (dictionary)
elif (choice == 3):
movie1=input("first movie")
movie2=input("second movie")
actors=allActors(movie1, movie2)
print (actors)
elif (choice == 4):
movie1=input("first movie")
movie2=input("second movie")
actors=actorsOverlap(movie1,movie2)
print (actors)
elif (choice == 5):
actor=input("actor's name")
try:
coactors=coactors(actor)
print (coactors)
except:
print ("Error. Check spelling and try again.")
choice = menu()
set
生成无序的唯一列表set1 & set 2
将为您提供所有公共元素,无需创建额外的actor1和actor2列表。在您可以使用
reduce
和set
来查找值和兴趣的并集输出:
{a1}你可以使用。在
根据定义,集合只包含唯一的元素。在
下面是一个使用集合的代码的粗略重写(假设字典中仍然包含列表):
相关问题 更多 >
编程相关推荐