2014-04-05 127 views
2

我的目标是在Python中创建一个字典。我有一个.csv文件,其中包含两列,第一个是'单词',另一个是'意思'。我正在尝试读取字典格式的csv文件,并在给出'单词'时获取'含义'。创建字典

你能帮我告诉我如何获得'单词'的价值?这是我的尝试:

我的代码,

>>> with open('wordlist.csv', mode = 'r') as infile: 
...  reader = csv.reader(infile) 
...  with open('wordlist.csv', mode = 'w') as outfile: 
...   writer = csv.writer(outfile) 
...   mydict = {rows[0]:rows[1] for rows in reader} 
...  print(mydict) 
... 

结果证明是,

{} 

下一个我想是,

>>> reader = csv.reader(open('wordlist.csv', 'r')) 
>>> d = {} 
>>> for row in reader: 
...  k, v = row 
...  d[k] = v 
... 

但当我想使用这个,结果是这样的 -

>>> d['Try'] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
KeyError: 'Try' 

下一个代码我试过了,

>>> reader = csv.DictReader(open('wordlist.csv')) 
>>> result = {} 
>>> for row in reader: 
...  key = row.pop('word') 
...  if key in result: 
...   pass 
...  result[key] = row 
...  print result 
... 

它并没有给我任何答案的。

>>> for row in reader: 
...  for column, value in row.iteritems(): 
...   result.setdefault(column, []).append(value) 
...  print result 
... 

这也没有给我一个结果。

+0

CSV文件的顶部是否有标题行?多少?如果可能,请提供您想要阅读的CSV文件顶部的几行示例行。这应该有助于我们明白为什么它不起作用。 –

+2

你的第一个代码似乎打开'final_word.csv'进行读取,然后再次打开它*写入*,这将清除文件的内容。这看起来并不像你想要的那样。 – DSM

+0

事实上,鉴于DSM指出的问题,我怀疑这个文件在你以后的测试中是空的!我希望你有一个可用的备份副本。您的代码的更高版本可能会或可能不会工作,具体取决于您的文件内容。例如,有没有标题行?你有没有重复的“字”值(如果是这样,你想如何处理它们)? – Blckknght

回答

1

我会用熊猫。然后你可以使用zip 2创建字典。

import pandas as pd  

df = pd.read_csv('wordlist.csv') 
words = list(df.word) 
meaning = dict(zip(df.word, df.meaning)) 

如果您的文件没有标题行,那没关系。只是打印出来的每一列仍然有一些可以引用的名字。

替代

import pandas as pd  

df = pd.read_csv('wordlist.csv') 
dictionary = {} 

for w, s, m, p in zip(df.words, df.meaning): 
    dictionary[w] = [m, p] 
+0

@ user3458145我为你添加了一些代码。 – cdhagmann

1

如果 “final_word.csv” 看起来是这样的:

word1, synonym1, meaning1, POS_tag1 
word2, synonym2, meaning2, POS_tag2 

这将在阅读它作为一个字典:

with open("final_word.csv",'r') as f: 
    rows = f.readlines() 

dictionary = {} 
for row in rows: 
    row = row.strip() 
    word, synonym, meaning, POS_tag = row.split(", ") 
    dictionary[word] = [synonym, meaning, POS_tag] 

print(dictionary['word1']) 
#out>> ['synonym1', 'meaning1', 'POS_tag1'] 
print(dictionary['word2'][0]) 
#out>> synonym2 

的strip()用于消除换行符“\ n”在每个csv行的末尾

+0

对不起,延迟回复。这听起来很有用,但是当我尝试这样做时,出现语法错误,如下所示:文件“”,第5行 print dictionary ['Psychoanalysis'] ^ SyntaxError:invalid syntax – user3458145

+0

请看[this]( http://stackoverflow.com/a/13961161/2808954) –

+0

谢谢。我有Python 2.7。我必须使用print作为声明。但是当我尝试这个'打印字典'''心理分析'''我没有得到所需的结果。什么可能是正确的语法? – user3458145