【问题标题】:Unable to store non-characters text in a dictionary in python无法在python的字典中存储非字符文本
【发布时间】:2018-06-13 10:52:40
【问题描述】:

我正在尝试情绪分析,我有像

这样的数据
  • source_text-> @LiesbethHBC 其实我有一种很好的感觉 ðŸ™^ 没那么长,很快!\n你值得拥有这些门票 然后! ðŸ'–

  • result_value-> 情绪(极性=0.0,主观性=0.0)

我想将此键值对存储在 python 字典中。

我尝试创建一个:

dict={}

dict[source_text].append(result_value)

但我得到KeyError 有没有办法将这样的文本(不是字符)存储在字典中?

【问题讨论】:

  • dict[key] = item 是您要查找的语法
  • 也不要使用dict作为变量名。

标签: python sentiment-analysis


【解决方案1】:

您的问题与“非字符文本”无关(实际上并不意味着什么),对象可用作 dict 键的唯一要求是它是可散列的,并且绝对没有限制您可以将其用作价值。

你的问题很简单,因为你试图获取一个不存在的键的值(这就是KeyError 的意思:你要求的键在字典中不存在)。

这里:

mydict = {}

此时,mydict 为空,因此任何项目访问都会引发 KeyError

那么你正在这样做:

dict[source_text].append(result_value)

基本上是:

something = mydict[source_text] # get value for key `source_text`
something.append(result_value)

由于您的 dict 为空,因此第一行显然会引发 KeyError

如果您想为每个 source_text 值存储一个唯一的 result_value,那么正确的语法是:

mydict[source_text] = result_value

如果您想为每个 source_text 值存储一个 result_value 列表,那么您必须明确测试是否设置了键,如果没有使用空列表设置它,则附加到此列表:

if source_text not in mydict:
    mydict[source_text] = []
mydict[source_text].append(result_value)

或者直接使用DefaultDict

from collections import DefaultDict
mydict = DefaultDict(list)
# DefaultDict will automagically create the key with an empty list
# as value if the key is missing
mydict[source_text].append(result_value)

现在我强烈建议你花一些时间正确学习 Python(提示:官方文档中有相当不错的教程),如果你必须使用它,这将节省大家的时间。

【讨论】:

  • 感谢您的解释
  • @SushmitaMitkar 很高兴我能提供帮助 - 如果它解决了您的问题,请随时接受答案。
【解决方案2】:

问题在于,当您尝试在字典中提取键 @LiesbethHBC I have a good feeling actually 🙈 its not that long, it's pretty soon!\nAw you deserve these tickets then! 💖(在这种情况下不存在)时,Python 给了您一个 KeyError,这意味着该键在字典中不存在。解决此问题的一种简单方法是首先检查您是否在字典中具有该特定键,如果有,请使用它做任何您想做的事情,否则首先创建该键。

顺便说一句,避免使用dict(字典数据类型)或任何其他数据类型作为变量名。

这是你实际应该做的:

dictionary = {}  # Since, 'dict' is the dictionary data-type in Python

if (source_text in dictionary):
    # If the key exists...
    dictionary[source_text].append(result_value)

else:
    # If the key does not exist...
    dictionary[source_text] = []

这应该会有所帮助...

【讨论】:

    【解决方案3】:

    您是否尝试过使用 '.update' 方法?

    dict = {}
    dict.update({'First':'Test'})
    dict.update({'Lets Get':'Real'})
    print (dict)
    

    输出:

    {'Testing': 'Dictionaries', 'Lets Get': 'Real'}
    

    编辑: 甚至:

    dict = {}
    dict.update({'Polarity':0.91})
    dict.update({'Subjectivity':0.73})
    print (dict)
    

    输出:

    {'Polarity': 0.8, 'Subjectivity': 0.73}
    

    【讨论】:

    • 在字典中设置键的规范方法是mydict[key] = valuedict.update() 仅在您想同时设置多个键时才有用,因此连续两次 update() 调用每个都使用一个键:值对是一个完整的 WTF。附带说明一下,如果您的密钥是有效的 python 标识符,您不必构建另一个字典,您可以使用 mydict.update(key1=val1, key2=val2)。但无论如何,这些都不能解决 OP 的问题 - 他得到了 KeyError,因为他试图为尚未设置的密钥获取价值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 2012-02-15
    • 1970-01-01
    相关资源
    最近更新 更多