使用DictReader从CSV读入列表

时间:2017-11-04 19:59:16

标签: python csv dictionary python-3.6

代码:

def import_csv():

    with open('list.csv') as csvfile:
        reader = csv.DictReader(csvfile,delimiter=",")
        print(list(reader))

输出是:

[OrderedDict([('Anrede', 'asfsf'), ('Vorname', 'dsfsdfsd'), ('Nachname', 'sdfsdfdsf'), ('Strasse', 'sdfsdfsd'), ('Hausnummer', 'sdf'), ('PLZ', 'dsf'), ('Stadt', 'dsf'), ('Telefon1', 'dsf'), ('Telefon2', 'sdf'), ('E-Mail', 'sdf')]), OrderedDict([('Anrede', '123123'), ('Vorname', '213213'), ('Nachname', '213123'), ('Strasse', '123213'), ('Hausnummer', '12312'), ('PLZ', '21323'), ('Stadt', '23'), ('Telefon1', '23'), ('Telefon2', '23'), ('E-Mail', '2')])]

我的CSV文件如下:

Anrede,Vorname,Nachname,Strasse,Hausnummer,PLZ,Stadt,Telefon1,Telefon2,E-Mail
asfsf,dsfsdfsd,sdfsdfdsf,sdfsdfsd,sdf,dsf,dsf,dsf,sdf,sdf
123123,213213,213123,123213,12312,21323,23,23,23,2

我无法找到解决方案,为什么我的输出与此问题相同:Convert a csv.DictReader object to a list of dictionaries?

我想将这些行作为dict读取,并将标题信息作为键,然后将所有这些作为列表保存在一起。

2 个答案:

答案 0 :(得分:6)

那是因为他们改变了python 3.6中csv.DictReader的实现。这个新实现的有趣之处在于密钥按标题排序,并由OrderedDict对象保证(即使在Python 3.6中,所有的dicts都是有序的,但是'被视为一个实现细节,因此csv模块并不依赖于它)

以前,您的代码返回了一个字典列表,现在它返回一个列表或有序字典,这是一个专业化。

您担心数据的表示,但它会正常工作,它们仍然是字典(例如尝试print(list(reader)[0]['Anrede'])

只是为了让您放心,只是尝试转换为标准词典:

print([dict(d) for d in reader])

你会得到

  

[{' Anrede':' asfsf',' Vorname':' dsfsdfsd',' Nachname': ' sdfsdfdsf',' Strasse':' sdfsdfsd',' Hausnummer':' sdf',' PLZ& #39;:' dsf',' Stadt':' dsf',' Telefon1':' dsf',& #39; Telefon2' sdf','电子邮件':' sdf'},{' Anrede':&# 39; 123123',' Vorname':' 213213',' Nachname':' 213123',' Strasse' ;:' 123213',' Hausnummer'' 12312',' PLZ':' 21323',' ; Stadt':' 23'' Telefon1':' 23',' Telefon2':' 23' ,'电子邮件':' 2'}]

就像你在早期版本的python上运行代码一样。

答案 1 :(得分:3)

最多3.6版本,DictReader生成了普通的dicts。这改变了3.6。这就是为什么你没有通过你所提供的链接获得相同的结果。使用早期版本获取字典。或者坚持使用3.6 - OrderedDict也是很好用的数据结构。

  

版本3.6中更改:返回的行现在是OrderedDict类型。

https://docs.python.org/3/library/csv.html#csv.DictReader