有两个明显的问题.在循环中重新定义final_list
,并在第一个循环中返回.
修复后会得到如下结果:
def myfunction(data, genre_name):
movie_dict = {}
final_list = []
for i in range(1,1000):
if genre_name in data[str(i)]['genres']:
movie_dict["Title"] = data[str(i)]['title']
movie_dict["Language"] = data[str(i)]['original_language']
final_list.append(movie_dict)
return final_list
现在还有一个更微妙的问题.您总是将同一本词典添加到列表中.
举个例子:
d = {}
l = []
for i in range(5):
d['x'] = i ** 2
l.append(d)
print(l)
现在l
包含同一个字典5次,该字典将包含循环最后一次迭代的内容:[{'x': 16}, {'x': 16}, {'x': 16}, {'x': 16}, {'x': 16}]
.要解决这个问题,您必须在循环中创建字典,因此在代码中,您必须将movie_dict = {}
移动到适当的位置:
def myfunction(data, genre_name):
final_list = []
for i in range(1,1000):
if genre_name in data[str(i)]['genres']:
movie_dict = {}
movie_dict["Title"] = data[str(i)]['title']
movie_dict["Language"] = data[str(i)]['original_language']
final_list.append(movie_dict)
return final_list
现在是一些更先进的东西.我假设data
是一个字典,因为您使用字符串进行索引.如果您不限于data
0个条目,但希望访问字典中的所有值,则可以循环字典值:
def myfunction(data, genre_name):
final_list = []
for entry in data.values():
if genre_name in entry['genres']:
movie_dict = {}
movie_dict["Title"] = entry['title']
movie_dict["Language"] = entry['original_language']
final_list.append(movie_dict)
return final_list
现在,让我们在调用append
时动态创建字典.
def myfunction(data, genre_name):
final_list = []
for entry in data.values():
if genre_name in entry['genres']:
final_list.append({'Title': entry['title'], 'Language': entry['original_language']})
return final_list
这可以改写为一个列表:
def myfunction(data, genre_name):
return [{'Title': entry['title'], 'Language': entry['original_language']} for entry in data.values() if genre_name in entry['genres']]
这就是全部.