Python Dictreader 对字段名进行排序
Posted
技术标签:
【中文标题】Python Dictreader 对字段名进行排序【英文标题】:Python Dictreader Sorting Fieldnames 【发布时间】:2012-12-28 09:03:58 【问题描述】:我有一个包含内容的 .csv 文件(示例)
Attributes,Description,Dial-Up
4,2,0.2
3,1,0.4
使用字典阅读器:
dictreader = csv.DictReader(open(filename, "rb"), delimiter=',')
dictdata =
count=0
for row in dictreader:
dictdata[count]=row
count=count+1
并显示在表格中或使用作家我会得到:
Dial-Up,Attributes,Description
0.2,4,2
0.4,3,1
那么我该如何对字段名进行排序呢?
【问题讨论】:
请包含创建显示的代码。这是帮助您的关键一步。因为这实际上是您的问题所在。dict
类型未排序。你为什么使用DictReader
? csv.reader
可能就是你想要的。
【参考方案1】:
DictReader
将字段(字典键)存储在名为 fieldnames
的属性中:
fields = dictreader.fieldnames
print(fields)
# ['Attributes', 'Description', 'Dial-Up']
所以要按这个顺序打印行值:
print(','.join(fields))
for row in dictreader:
print(','.join(row[field] for field in fields))
产量
Attributes,Description,Dial-Up
4,2,0.2
3,1,0.4
或者,使用@JonClements 的想法:
import operator
fields = dictreader.fieldnames
getfields = operator.itemgetter(*fields)
for row in dictreader:
print(','.join(getfields(row)))
使用operator.itemgetter
的动机是它比使用列表推导式更快:
In [70]: %timeit getfields(row)
10000000 loops, best of 3: 174 ns per loop
In [71]: %timeit [row[field] for field in fields]
1000000 loops, best of 3: 272 ns per loop
【讨论】:
或者 -print(','.join(itemgetter(*fields)))
@JonClements:您使用itemgetter
的代码导致TypeError
。
@martineau 好吧,我承认没有测试它,但不明白为什么 - 似乎 unutbu 如何实现它
@Jon Clements:unutbu 在他的更新答案中实现的内容与您在评论中的代码有很大不同。显然他能够弄清楚你想说什么。以上是关于Python Dictreader 对字段名进行排序的主要内容,如果未能解决你的问题,请参考以下文章
在 python 中使用 csv.DictReader 进行数据类型转换的最快方法
python通过DictReader实现两个csv文件的映射查找lookup之代码详解
如果我使用itertool中的islice从第5行开始,如何使用DictReader?
使用 DictReader 访问 CSV 的第三列时出现 KeyError [重复]