Awf*_*mon 5 python iterable class
我试图迭代列表列表中的每一行,将每行中的一个元素附加到新列表中,然后在新列表中查找唯一元素。
我知道我可以使用 for 循环轻松完成此操作。我正在尝试不同的路线,因为我想了解有关类和函数的更多信息。
这是列表列表的示例。第一行是标题:
legislators = [
['last_name', 'first_name', 'birthday', 'gender', 'type', 'state', 'party'],
['Bassett', 'Richard', '1745-04-02', 'M', 'sen', 'DE', 'Anti-Administration'],
['Bland', 'Theodorick', '1742-03-21', '', 'rep', 'VA', ''],
['Burke', 'Aedanus', '1743-06-16', '', 'rep', 'SC', ''],
['Carroll', 'Daniel', '1730-07-22', 'M', 'rep', 'MD', ''],
['Clymer', 'George', '1739-03-16', 'M', 'rep', 'PA', ''],
['Contee', 'Benjamin', '', 'M', 'rep', 'MD', ''],...]
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
import csv
f = open("legislators.csv")
csvreader = csv.reader(f)
legislators = list(csvreader)
class Dataset:
def __init__(self, data):
self.header = data[0] #Isolate header from CSV file
self.data = data[1:] #Subset CSV data to remove header
legislators_dataset = Dataset(legislators)
def the_set_maker(dataset):
gender = []
for each in dataset:
gender.append(each[3])
return set(gender)
t=the_set_maker(legislators_dataset)
print(t)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
legislators = [
['last_name', 'first_name', 'birthday', 'gender', 'type', 'state', 'party'],
['Bassett', 'Richard', '1745-04-02', 'M', 'sen', 'DE', 'Anti-Administration'],
['Bland', 'Theodorick', '1742-03-21', '', 'rep', 'VA', ''],
['Burke', 'Aedanus', '1743-06-16', '', 'rep', 'SC', ''],
['Carroll', 'Daniel', '1730-07-22', 'M', 'rep', 'MD', ''],
['Clymer', 'George', '1739-03-16', 'M', 'rep', 'PA', ''],
['Contee', 'Benjamin', '', 'M', 'rep', 'MD', ''],...]
Run Code Online (Sandbox Code Playgroud)
我认为答案是尝试创建一个def __iter__(self)在我的Dataset班级中使用的方法,但我无法让它发挥作用。这是正确的道路吗?如果没有,还有什么更好的呢?
根据文档__iter__:
此方法应返回一个新的迭代器对象,该对象可以迭代容器中的所有对象。
您可以尝试以下类定义:
class Dataset:
def __init__(self, data):
self.header = data[0] #Isolate header from CSV file
self.data = data[1:] #Subset CSV data to remove header
def __iter__(self):
return iter(self.data)
Run Code Online (Sandbox Code Playgroud)
如果您愿意尝试新选项,请考虑使用 Pandas:
import pandas as pd
df = pd.read_csv('legislators.csv')
t=df['gender']
Run Code Online (Sandbox Code Playgroud)
或者,如果您确实想自己阅读 CSV,
df = pd.DataFrame(legislators[1:], columns=legislators[0])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7240 次 |
| 最近记录: |