python - 比较列表中的列
问题描述
我已经对 csv 文件进行了拆分(下面给出了链接),下面给出了我的数据输出。在比较国家/地区列时我几乎不需要帮助,只返回仅在美国制作的电影名称。我怎么做?
data = open("movie_metadata.csv", "r").read().split("\\n")
movie_data = [i.split(",") for i in data]
print(movie_data[1:4])
output:
[['movie_title','director_name','color','duration','actor_1_name','language',
'country','title_year'],
['Avatar','James Cameron','Color','178','CCH Pounder','English','USA',
'2009'],
["Pirates of the Caribbean: At World's End",'Gore Verbinski','Color',
'169','Johnny Depp','English','USA','2007'],
['Spectre','Sam Mendes','Color','148','Christoph Waltz','English','UK',
'2015']]
解决方案
您想根据国家/地区列过滤列表。
us_movies = [movie for movie in movies if movie[6] == 'USA']
如果您愿意,您也可以将线条转换为标题。
us_movie_titles = [movie[0] for movie in movies if movie[6] == 'USA']
如果您想要匹配谓词结果的相应列表,这将起作用:
is_match = [movie[6] == 'USA' for movie in movies]
请注意,前两个列表的大小可能小于原始列表,但 is_match 将具有与原始列表相同的大小和顺序。
要将布尔值添加到完整数据集:
movies_with_usa = [m[0] + [m[1]] for m in zip(movies, is_match)]
但是你真正拥有的是命名数据,所以它可能更适合在字典或对象中。此外,如果您正在阅读 csv 文件,则 csv 阅读器是标准库的一部分。所以对于一些更强大的东西
import csv
def read_data(filename):
with open(filename) as f:
reader = csv.DictReader(f)
return [row for row in reader]
def match(record, field, value):
return record[field] == value
data = read_data("movie_metadata.csv")
us_movies = [record for record in data if match(record, 'country', 'USA')]
推荐阅读
- c++ - Ncurses mvwprintw 不打印
- reactjs - react-mic 录制音频并将 blob 作为 mp3/wav 发送到后端
- mysql - 为什么Mysql总是在存储过程中返回零值?
- c# - 在某些条件下从 json 中提取属性
- python - 在图形菜单中调用函数时出现 Tkinter 错误
- python - 按列数据值解开数据框
- python - BeautifulSoup find() 没有关键字参数错误
- regex - VS Code 正则表达式替换
- php - 一般错误电信没有默认值与模型中的功能
- ios - 通过 UIStoryboard.instantiateViewController 初始化的 UIViewController 在设置为 nil 时不会在单元测试期间取消初始化