【问题标题】:lexicon file into dict python词典文件到 dict python
【发布时间】:2018-08-05 10:11:32
【问题描述】:

所以我们遇到了一个问题,即给定一个 txt 格式的正负词词典,我们必须将其转移到字典中({}),我只是想知道是否有更好的方法来做到这一点除了将所有单词和正数和负数复制到列表中。就像使用 for 循环一样。谢谢! 数据以txt文件的形式呈现给我们

tasty 2.52
gracious 2.52
joyful 2.64

我们要做的就是在字典中打印出来

#modified by: Ou Li
#date: 2/24/2018
import sys
def main():
    filename = sys.argv[-1]
    print_lexicon(filename)
def print_lexicon(filename):
    lexicon = {}
    with open(filename, "r") as file:
        for line in file:
            key,value = line.strip().split(',')
            lexicon = {key:value}
    print (lexicon)

这就是我现在拥有的

【问题讨论】:

    标签: python list dictionary for-loop sentiment-analysis


    【解决方案1】:

    您快到了,但您必须执行main 函数并调整添加到字典的方式。您目前执行此操作的方式将为文件中的每个项目创建一个条目,只留下最后一个项目。

    import sys
    def main():
        filename = sys.argv[-1]
        print_lexicon(filename)
    
    def print_lexicon(filename):
        lexicon = {}
        with open(filename, "r") as file:
            for line in file:
                key,value = line.strip().split(',')
                lexicon[key]=value
        print (lexicon)
    if __name__ == "__main__":
        main()
    

    输入:

    tasty, 2.52
    gracious, 2.52
    joyful, 2.64
    

    输出:

    {'tasty': ' 2.52', 'joyful': ' 2.64', 'gracious': ' 2.52'}
    

    如果您需要 value 为数字,请将上面的内容更改为:

    lexicon[key]=float(value)
    

    【讨论】:

      【解决方案2】:

      如果您的单词没有任何空格,或者您可以将单词和值之间的分隔值更改为唯一的值,您可以使用pandas。示例脚本:

      import pandas as pd
      
      
      df = pd.read_csv(r"test.txt", sep=' ', header=None, names=['Word', 'Value'])
      print(df.head())
      
      # returns: 
      #
      #    Word       Value
      # 0  tasty      2.52
      # 1  gracious   2.52
      # 2  joyful     2.64
      

      然后,如果您需要将值传递给其他东西,df.values 返回值的 numpy 数组:

      print(df.values)
      
      # returns:
      #
      # [['tasty', 2.52]
      #  ['gracious', 2.52]
      #  ['joyful', 2.64]]
      

      编辑: 由于您不能使用 pandas,因此只需打开文件并直接遍历这些行。您必须根据需要实现错误捕获,但这里有一个简单的示例:

      with open('test.txt', 'r') as f:
          contents = f.readlines()
      
      {word: value for word, value in [line.rstrip('\n').split(' ') for line in contents]}
      

      【讨论】:

      • 谢谢,这可以用 python 字典完成吗{}
      • 什么意思?如果你只想要一个像{'tasty': 2.52'} 这样的字典,这个单行代码就可以了:{word: value for word, value in df.values}。请注意,如果您有多个单词实例,它只会保留一个值
      • 我们不允许使用df
      • 那你到底卡在哪里了?你试过什么?
      • 我真的不明白如何将单词和值分别放入字典中。
      猜你喜欢
      • 1970-01-01
      • 2022-11-17
      • 1970-01-01
      • 1970-01-01
      • 2020-07-13
      • 2018-01-11
      • 1970-01-01
      • 1970-01-01
      • 2017-03-25
      相关资源
      最近更新 更多