【问题标题】:Creating a dictionary创建字典
【发布时间】:2014-05-17 14:06:28
【问题描述】:

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

你能告诉我如何获得'word'的价值吗?这是我尝试过的:

我的代码是,

>>> 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
... 

这也没有给我一个结果。

【问题讨论】:

  • CSV 文件的顶部是否有标题行?多少?如果可能,请提供您尝试读取的 CSV 文件顶部的几行示例。这应该有助于我们了解它为什么不起作用。
  • 您的第一个代码似乎打开final_word.csv 进行读取,然后再次打开它以进行写入,这将清除文件的内容。这似乎不是你想要的。
  • 确实,鉴于 DSM 指出的问题,我怀疑在您以后的测试中该文件为空!我希望你有一个可用的备份副本。您的代码的更高版本可能会或可能不会工作,具体取决于文件的内容。例如,是否有标题行?您是否有重复的 word 值(如果有,您想如何处理它们)?

标签: python csv dictionary


【解决方案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]

【讨论】:

    【解决方案2】:

    如果“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() 用于删除每个 csv 行末尾的换行符“\n”

    【讨论】:

    • 抱歉回复延迟。这听起来很有用,但是当我尝试这个时,我得到一个语法错误,如下所示: File "", line 5 print dictionary['Psychoanalysis'] ^ SyntaxError: invalid syntax
    • 谢谢。我有 Python 2.7。我必须使用 print 作为声明。但是当我尝试这个'打印字典['心理分析']'时,我没有得到所需的结果。什么可能是正确的语法?
    • @user3458145,我建议您使用这样的括号:print(dictionary['Psychoanalysis']),因为它适用于 py2.7 和 py3.4。但是py2.7中的语法是:print dictionary['Psychoanalysis']
    • @Tim Lind 现在它给了我 keyerror。我的语料库中有这个词,它不应该给我一个关键错误。知道为什么吗?
    • @user3458145,出于某种原因,您的单词似乎并不作为字典中的键存在。要么它不在 ccorpus 文件的第一列,要么你拼错了这个词。字典区分大小写,因此可能需要研究一下。
    猜你喜欢
    • 2016-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 2019-08-07
    • 2016-11-20
    • 2021-12-07
    相关资源
    最近更新 更多