从csv.DictReader中查找Dict值

Sop*_*ton 6 csv dictionary

我正在尝试通过csv.DictReader获取csv文件并将其转换为字典.执行此操作后,我想修改字典的其中一列,然后将数据写入tsv文件.我正在处理文本中的单词和单词频率.

我已经尝试使用dict.value()函数来获取字典值,但是我收到一条错误消息,说"AttributeError:DictReader实例没有属性"值""

以下是我的代码:

#calculate frequencies of each word in Jane Austen's "Pride and Prejudice"
import csv

#open file with words and counts for the book, and turn into dictionary
fob = open("P&P.csv", "r")
words = csv.DictReader(fob)
dict = words

#open a file to write the words and frequencies to
fob = open("AustenWords.tsv", "w")

#set total word count
wordcount = 120697

for row in words:
    values = dict.values()
    print values
Run Code Online (Sandbox Code Playgroud)

基本上,我有文本中每个单词的总数(即"a","1937"),我想找到有问题的单词使用的总字数的百分比(因此,对于"a",百分比将是1937/120697.)现在我的代码没有这样做的公式,但是我希望,一旦我获得每一行的值,就用一个字和一个字来写新行的文件.计算百分比.如果有人有更好的方式(或任何方式!)这样做,我将非常感谢任何输入.

谢谢

mat*_*nam 14

要回答基本问题 - "我为什么会收到此错误" - 当您致电时csv.DictReader(),返回类型iterator不是a Dictionary.

迭代器中的每个ROW Dictionary都可以用于脚本:

for row in words:    
    values = row.values()    
    print values
Run Code Online (Sandbox Code Playgroud)


Nat*_*oor 13

感谢Matt Dunnam的回答(我会回答它,但我不知道如何).csv.DictReader对象,非常违反直觉,不是字典对象(虽然我认为我开始看到一些有用的原因).正如他所说,csv.DictReader对象是一个迭代器(我的介绍级别为python,我认为这可能就像一个列表).该对象中的每个条目(不是字典)都是字典.

因此,csv.DictReader返回类似字典列表的内容,这与返回一个字典对象不同,尽管名称不同.

到目前为止,最好的是csv.DictReader确实在第一行保留了我的键值,并将它们正确地放置在许多字典对象中,这些对象是它实际返回的可迭代对象的一部分(同样,它没有返回字典对象!).

我已经浪费了大约一个小时敲打这个,文档不够清楚,虽然现在我知道csv.DictReader返回什么类型的对象,文档更清晰.我认为文档说的是它如何返回一个可迭代对象,但是如果你认为它返回一个字典并且你不知道字典是否可迭代,那么这很容易被读作"返回一个字典对象".

文档应该说"这不会返回一个字典对象,而是返回一个包含每个条目的字典对象的可迭代对象"或者其他一些东西.作为一个没有20年编码的蟒蛇新手,我一直遇到文档由专家编写的问题,而且对于初学者来说它太密集了.

我很高兴它就在那里,而且人们已经把时间花在了它上面,但它可以让初学者更容易,同时又不会降低它对专业pythonistas的价值.