2 回答
TA贡献1770条经验 获得超3个赞
小优化和可读性提示:尽可能避免索引选择。
如果您同时迭代一个可迭代对象的索引和值,请避免使用 range(len(x)),而直接使用enumerate,在 Python 中速度更快且可读性更高。
让我们假设以下输入:
reader = [['1','2','3'],['11','22','33'],['111','222','333']]
title = ['T1','T2','T3']
改进@balderman 的回答:
csv_rows = []
for row in reader:
csv_rows.extend([{val: row[idx] for idx, val in enumerate(title)}])
更好更清楚的是完全避免使用索引:
csv_rows = []
for row in reader:
csv_rows.extend([ {t_val: r_val for (t_val, r_val) in zip(title, row)} ])
更紧凑(更快):
[{t_val: r_val for (t_val, r_val) in zip(title, row)} for row in reader]
List 和 dict-comprehensions 一开始有点棘手,但如果你把它们想象成“for 循环,for 放在后面”,它们就不那么奇怪了。
TA贡献1798条经验 获得超7个赞
下面的代码在python 3.6和2.7下测试
(我相信这就是你要找的)
reader = [['1','2','3'],['11','22','33'],['111','222','333']]
csv_rows = []
title = ['T1','T2','T3']
for row in reader:
csv_rows.extend([ {title[i]:row[i] for i in range(len(title))} ])
print(csv_rows)
输出
[{'T2': '2', 'T3': '3', 'T1': '1'}, {'T2': '22', 'T3': '33', 'T1': '11'}, {'T2': '222', 'T3': '333', 'T1': '111'}]
添加回答
举报