字典排序的Bucketized列表-基于键的某些值的重叠



我有以下数据结构-电影词典列表,按类型分组(非常大,这里只是一个示例(:

data={'Action': [{'title': 'They Live',
'year': 1988,
'genres': ['Action', 'Horror', 'Sci-Fi'],
'duration': 94,
'directors': ['John Carpenter'],
'actors': ['Roddy Piper', 'Keith David', 'Meg Foster'],
'rating': 7.3},
{'title': 'Ultra Warrior',
'year': 1990,
'genres': ['Action', 'Adventure', 'Sci-Fi'],
'duration': 81,
'directors': ['Augusto Tamayo San Román', 'Kevin Tent'],
'actors': ['Dack Rambo',
'Clare Beresford',
'Meshach Taylor',
'Mark Bringelson'],
'rating': 1.9},
{'title': 'Kick-As 2',
'year': 2013,
'genres': ['Action', 'Comedy', 'Crime'],
'duration': 103,
'directors': ['Jeff Wadlow'],
'actors': ['Aaron Taylor-Johnson', 'Chloë Grace Moretz'],
'rating': 6.5}],
'Drama': [{'title': 'Dirty Beautiful',
'year': 2015,
'genres': ['Comedy', 'Drama', 'Romance'],
'duration': 95,
'directors': ['Jodie Foster'],
'actors': ['Jodie Foster', 'Ricky Mabe', 'Jordan Monaghan', 'Conor Leslie', 'Darin Heames'],
'rating': 5.5},
{'title': 'Honeydripper',
'year': 2007,
'genres': ['Crime', 'Drama', 'History'],
'duration': 124,
'directors': ['John Sayles'],
'actors': ['Danny Glover', 'LisaGay Hamilton', 'Yaya DaCosta'],
'rating': 6.6}]}

我想把朱迪·福斯特同时担任演员和导演的所有电影都列出来。还有"克林特·伊斯特伍德"执导的最长电影的片名?

这是我到目前为止尝试的内容,但我有点卡住了,因为返回的列表是空的。。。它真的不应该。

for i in data:
d=data[i][0]
if 'Jodie Foster' in d['directors'] and 'Jodie Foster' in d['actors']:
movies.append(d["title"])
movies

movie="None"
maximum=0

for i in data:
d=data[i][0]
if 'Clint Eastwood' in d['directors'] and 'Clint Eastwood' in d['actors']:
if d["duration"]>maximum:
maximum=d["duration"]
movie=d["title"]

非常感谢您的帮助。。。

在我看来,你有一个结构奇怪的字典,但这只是一个偏好。以下是您想要的工作代码:


import json
print(json.dumps(data, indent=4)) # <--- cleanly printed JSON-like data

def movies_of_actor(actor_name):
movies = []
for genre, genre_list in data.items():
for movie_info in genre_list:
if actor_name in movie_info['actors']:
movies.append(movie_info['title'])
return movies
def movies_of_director(director_name):
movies = []
for genre, genre_list in data.items():
for movie_info in genre_list:
if director_name in movie_info['directors']:
movies.append(movie_info['title'])
return movies

def longest_title_of_actor(actor_name):
longest_title = None
length = 0
for genre, genre_list in data.items():
for movie_info in genre_list:
if actor_name in movie_info['actors']:
title = movie_info['title']
if length < len(title):
longest_title = title
return longest_title
def longest_title_of_director(actor_name):
longest_title = None
length = 0
for genre, genre_list in data.items():
for movie_info in genre_list:
if actor_name in movie_info['directors']:
title = movie_info['title']
if length < len(title):
longest_title = title
return longest_title
m1 = movies_of_actor('Jodie Foster')
m2 = movies_of_director('Jodie Foster')
# make sure the movie is in both
mt = []
for m in m1:
if m in m2:
mt.append(m)
print('Movies that Jodie Foster acted in and directed:', mt)
m3 = longest_title_of_actor('Clint Eastwood')
m4 = longest_title_of_director('Clint Eastwood')
print('Longest movie title that Clint Eastwood acted in:', m3)
print('Longest movie title that Clint Eastwood directed:', m4)
# part 1
actor = 'Jodie Foster'
result = []
for films in data.values():
for film in films:
if actor in film['directors'] and actor in film['actors']:
result.append(film['title'])
if result:
print(result)
else:
print(f'No results for {actor}')

# part 2
actor = 'Clint Eastwood'
result_2 = []
for films in data.values():
for film in films:
if actor in film['directors'] and actor in film['actors']:
result_2.append(film['duration'])
if result_2:
print(max(result_2))
else:
print(f'No results for {actor}')

最新更新