【问题标题】:Append dict items to a list in Python将dict项目附加到Python中的列表
【发布时间】:2013-08-07 04:23:52
【问题描述】:

我有一个包含

的字典
docs[infile]={'tf':{}, 'idf':{},'words':[], 'tf_idf':{}}

我有一个列表,我想传递一些 dict 的项目

子字典 tf_idf AND idf 包含数据,例如 {(word, number),(word, number),...}

我需要在列表中存储 tf_idf 和 idf 项目。此代码仅存储这 2 个子字典中的一个。

templist=[]
for key in docs: #stores data in separate list
    TF_IDF_buffer = docs[key]['tf_idf'].items()
    templist.append(TF_IDF_buffer)

是否可以将它们都存储在列表中?

【问题讨论】:

  • 如果他们有共同的钥匙会发生什么?应该只保留一个值还是两者都保留?
  • 键由单词和数字组成。单词相同,但数字不同。如果我存储两次单词,我没有问题。
  • 所以 templist 将成为列表列表?

标签: python list dictionary append


【解决方案1】:

这会连接两个项目序列,保留重复的键:

templist=[]
for key, value in docs.items():
    tf_idf = list(value['tf_idf'].items())
    idf = list(value['idf'].items())
    templist.append(tf_idf + idf)

【讨论】:

    【解决方案2】:

    我认为这样的东西应该是你正在寻找的东西

    templist=[]
    for key in docs: #stores data in separate list
        for word in docs[key]['words']:
             idf = docs[key]['idf']
             tf_idf = docs[key]['tf_idf']
             temp_list.append((word, tf_idf, idf))
    

    不过,我还在这个论坛上看到了您的一些其他问题。我认为您的嵌套列表和字典结构有些复杂。例如,您的单词列表与idftf_idf 中的键重复。

    您可能需要考虑使用更面向对象的方法。

    你可以这样定义一个类:

    class Document:
         def __init__(self, words, idf, tf_idf):
             self.words = words
             self.idf = idf
             self.tf_idf = tf_idf
    

    另外,根据我使用 NLP 的记忆,我记得使用 collections.defaultdict 可能非常有用(特别是如果您的 idftf_idf 字典很少)。

    【讨论】:

    • 行 temp_list.append((word, tf_idf, idf)) 导致溢出。结果文件 [('from', {'all': -0.0022909517465558244, 'help': -0.0022909517465558244,... ] 。我认为它需要每个单词并创建一个 subdict。我在不到一个分钟。
    • 这只是一个提示。假设您使用dict 跟踪文档中的字数。如果一个词没有出现在文档中,你需要存储dict[word] = 0。如果你使用defaultdict(int),那么如果文档中没有找到一个词,它将是自动归零。您还可以将概率存储在默认字典中。所以如果一个词,没有出现在文档中,例如defaultdict(lambda: -float('Inf'))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 2021-12-30
    • 2011-10-12
    • 1970-01-01
    • 2013-03-08
    相关资源
    最近更新 更多