ดังนั้นคุณต้องการสร้างรายการของรายการ ... เราต้องเริ่มต้นด้วยรายการที่ว่างเปล่า
list_of_lists = []
ต่อไปเราอ่านเนื้อหาไฟล์ทีละบรรทัด
with open('data') as f:
for line in f:
inner_list = [elt.strip() for elt in line.split(',')]
# in alternative, if you need to use the file content as numbers
# inner_list = [int(elt.strip()) for elt in line.split(',')]
list_of_lists.append(inner_list)
กรณีการใช้งานทั่วไปคือข้อมูลเรียงเป็นแนว แต่หน่วยเก็บข้อมูลของเราเป็นแถวของไฟล์ที่เราอ่านทีละรายการดังนั้นคุณอาจต้องการย้าย
รายการรายการของคุณ ซึ่งสามารถทำได้ด้วยสำนวนดังต่อไปนี้
by_cols = zip(*list_of_lists)
การใช้งานทั่วไปอีกอย่างหนึ่งคือการตั้งชื่อให้กับแต่ละคอลัมน์
col_names = ('apples sold', 'pears sold', 'apples revenue', 'pears revenue')
by_names = {}
for i, col_name in enumerate(col_names):
by_names[col_name] = by_cols[i]
เพื่อให้คุณสามารถทำงานกับรายการข้อมูลที่เป็นเนื้อเดียวกัน
mean_apple_prices = [money/fruits for money, fruits in
zip(by_names['apples revenue'], by_names['apples_sold'])]
สิ่งที่ฉันเขียนส่วนใหญ่สามารถเร่งความเร็วได้โดยใช้csv
โมดูลจากไลบรารีมาตรฐาน อีกโมดูลบุคคลที่สามคือpandas
ที่ช่วยให้คุณทำการวิเคราะห์ข้อมูลทั่วไปโดยอัตโนมัติ (แต่มีจำนวนการอ้างอิง)
อัปเดตในขณะที่ Python 2 zip(*list_of_lists)
ส่งคืนรายการที่แตกต่าง (transposed) ของรายการใน Python 3 สถานการณ์มีการเปลี่ยนแปลงและzip(*list_of_lists)
ส่งคืนออบเจ็กต์ zipที่ไม่สามารถถอดได้
หากคุณต้องการเข้าถึงการจัดทำดัชนีคุณสามารถใช้
by_cols = list(zip(*list_of_lists))
ที่ให้รายการของคุณใน Python ทั้งสองเวอร์ชัน
ในทางกลับกันถ้าคุณไม่ต้องการเข้าถึงการทำดัชนีและสิ่งที่คุณต้องการเพียงแค่สร้างพจนานุกรมที่จัดทำดัชนีโดยชื่อคอลัมน์วัตถุซิปจะไม่เป็นไร ...
file = open('some_data.csv')
names = get_names(next(file))
columns = zip(*((x.strip() for x in line.split(',')) for line in file)))
d = {}
for name, column in zip(names, columns): d[name] = column