【发布时间】:2018-05-22 15:06:44
【问题描述】:
假设数据很大,解决以下问题的任何有效方法。我解决了这个问题,但我怎样才能改进代码,这将提高效率。有什么建议吗?
数据:
movie_sub_themes = {
'Epic': ['Ben Hur', 'Gone With the Wind', 'Lawrence of Arabia'],
'Spy': ['James Bond', 'Salt', 'Mission: Impossible'],
'Superhero': ['The Dark Knight Trilogy', 'Hancock, Superman'],
'Gangster': ['Gangs of New York', 'City of God', 'Reservoir Dogs'],
'Fairy Tale': ['Maleficent', 'Into the Woods', 'Jack the Giant Killer'],
'Romantic':['Casablanca', 'The English Patient', 'A Walk to Remember'],
'Epic Fantasy': ['Lord of the Rings', 'Chronicles of Narnia', 'Beowulf']}
movie_themes = {
'Action': ['Epic', 'Spy', 'Superhero'],
'Crime' : ['Gangster'],
'Fantasy' : ['Fairy Tale', 'Epic Fantasy'],
'Romance' : ['Romantic']}
themes_keys = movie_themes.keys()
theme_movies_keys = movie_sub_themes.keys()
#Iterate in movie_themes
#Check movie_themes keys in movie_sub_keys
#if yes append the movie_sub_keys into the newdict
newdict = {}
for i in range(len(themes_keys)):
a = []
for j in range(len(movie_themes[themes_keys[i]])):
try:
if movie_themes[themes_keys[i]][j] in theme_movies_keys:
a.append(movie_sub_themes[movie_themes[themes_keys[i]][j]])
except:
pass
newdict[themes_keys[i]] = a
# newdict contains nested lists
# Program to unpack the nested list into single list
# Storing the value into theme_movies_data
theme_movies_data = {}
for k, v in newdict.iteritems():
mylist_n = [j for i in v for j in i]
theme_movies_data[k] = dict.fromkeys(mylist_n).keys()
print (theme_movies_data)
输出:
{'Action': ['Gone With the Wind', 'Ben Hur','Hancock, Superman','Mission: Impossible','James Bond','Lawrence of Arabia','Salt','The Dark Knight Trilogy'],
'Crime': ['City of God', 'Reservoir Dogs', 'Gangs of New York'],
'Fantasy': ['Jack the Giant Killer','Beowulf','Into the Woods','Maleficent','Lord of the Rings','Chronicles of Narnia'],
'Romance': ['The English Patient', 'A Walk to Remember', 'Casablanca']}
抱歉没有正确注释代码。
我更关心运行时间。
谢谢你..
【问题讨论】:
-
尝试codereview.stackexchange.com 以获取有关工作代码的帮助。
-
为了让您的代码在 Python 3 上运行 - 将两个 keys()(现在是 View Objects)传递给 list 函数,并将 .iteritems() 替换为 .items()。
标签: python performance list dictionary