我现在有这样的代码有2个列表:
movies = [{'name': '007: Spectre', 'year': 2015, 'length': '2:05'},
{'name': 'Terminator Genesis', 'year': 2015, 'length': '2:20'}]
rest_movies = [{'name':'Bridge of Spies', 'year': 2015, 'length': '1:50'},
{'name': 'Star Wars', 'year': 2015, 'length': '2:30'}]
check_if_movie_in_one_of_lists = 'Star Wars'
for line in movies:
name = line['name']
if name == check_if_movie_in_one_of_lists:
movie_year = line['year']
print(movie_year)
break
else:
for line in rest_movies:
name = line['name']
if name == check_if_movie_in_one_of_lists:
movie_year = line['year']
print(movie_year)
break
我认为这不是pythonic方式来检查其中一个列表中是否需要值。
就我而言:
答案 0 :(得分:1)
修改强>
因此,如果您必须保留当前结构中的内容,最好的方法就是:
movie_lists = [movies, rest_movies, ...]
for movie_list in movie_lists:
for item in movie_list:
if item['name'] == movie_to_find:
print(item['year'])
break
但这只有在您使用此信息一次时才有意义。如果你需要多次这样做(O(n)* m),循环一次构造name: year
形式的dicts是有意义的,然后利用dict查找的速度(O(n)+ O(1)<&lt; O(n)* m)。
我会将你的两个列表更改为两个dicts,因为dict查找是O(1)(其中列表查找是O(n)):
movies = {'007: Spectre': 2015}, {'Terminator Genesis': 2015}
rest_movies = {'Bridge of Spies': 2015}, {'Star Wars': 2015}
movie_to_find = 'Star Wars'
if movie_to_find in movies:
print(movies[movie_to_find])
elif movie_to_find in rest_movies:
print(rest_movies[movie_to_find])
对于具有多个dicts的通用解决方案,将dicts存储在列表中并遍历列表:
movie_sets = [movies, rest_movies, other_movies, ...]
for movie_set in movie_sets:
if movie_to_find in movie_set:
print(movie_set[movie_to_find])
要将您的dicts列表转换为独立的dicts:
movies = dict((m['name'], m['year']) for m in movies)
rest_movies = dict((m['name'], m['year']) for m in rest_movies)
答案 1 :(得分:0)
要在列表中查找值,请使用list.index(value)
。这将为您提供列表中指定值的索引。
来自docs:
返回值为x的第一个项目列表中的索引。如果没有这样的项目,则会出错。
示例:
>>> lst = [1,2,3]
>>> lst.index(1)
0
>>> lst.index(3)
2