【问题标题】:for loop over list KeyError: 664for循环列表KeyError:664
【发布时间】:2019-07-12 22:45:26
【问题描述】:

我正在尝试用单词来迭代这个列表


CTCCTC TCCTCT CCTCTC CTCTCC TCTCCC CTCCCA TCCCAA CCCAAA CCAAAC CAAACT  
CTGGGC TGGGCC GGGCCA GGCCAA GCCAAT CCAATG CAATGC AATGCC ATGCCT TGCCTG GCCTGC  
TGCCAG GCCAGG CCAGGA CAGGAG AGGAGG GGAGGG GAGGGG AGGGGC GGGGCT GGGCTG GGCTGG GCTGGT CTGGTC 
TGGTCT GGTCTG GTCTGG TCTGGA CTGGAC TGGACA GGACAC GACACT ACACTA CACTAT  
ATTCAG TTCAGC TCAGCC CAGCCA AGCCAG GCCAGT CCAGTC CAGTCA AGTCAA GTCAAC TCAACA CAACAC AACACA 
ACACAA CACAAG ACAAGG AGGTGG GGTGGC GTGGCC TGGCCT GGCCTG GCCTGC CCTGCA CTGCAC 
TGCACT GCACTC CACTCG ACTCGA CTCGAG TCGAGG CGAGGT GAGGTT AGGTTC GGTTCC  
TATATA ATATAC TATACC ATACCT TACCTG ACCTGG CCTGGT CTGGTA TGGTAA GGTAAT GTAATG TAATGG AATGGA 

我正在尝试 for 循环读取列表中的每个项目并通过 mk_model.vector 解析它

使用的代码如下

for x in all_seq_sentences[:]:
    mk_model.vector(x)
    print(x)

通常,mk_model.vector("AGT") 会给出一个与定义的 dna2vec 模型相对应的数组,但这里不是实际执行模型运行,而是会抛出错误

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-144-77c47b13e98a> in <module>
      1 for x in all_seq_sentences[:]:
----> 2     mk_model.vector(x)
      3     print(x)
      4 

~/Desktop/DNA2vec/dna2vec/dna2vec/multi_k_model.py in vector(self, vocab)
     35 
     36     def vector(self, vocab):
---> 37         return self.data[len(vocab)].model[vocab]
     38 
     39     def unitvec(self, vec):

KeyError: 664

在这里期待一些帮助

【问题讨论】:

  • 嗨@Kay - 如果你更准确地了解你的开始,它会帮助人们更好地理解你的问题。您说您从一个列表开始,但您发布的代码只是一堆字母 - 我们无法判断这是否是列表列表中的 ['CTCCTC', 'TCCTCT', 'CCTCTC'] 之类的字符串列表:[['CTCCTC'], ['TCCTCT', 'CCTCTC']]。或者一根巨大的弦。或者是其他东西。如果您发布描述您所拥有的实际 python 会更清楚。
  • 另外,这个关键错误664 表明您可能正在传递整个字符串而不是将其拆分为单个组件。
  • @MarkMeyer 谢谢!但是任何关于如何从列表中一次传递一个项目的想法..非常感谢您的帮助!我将 DNA 序列视为句子,然后分解成单词。它是 DNA2vec 模型的实现
  • 我仍然不确定你从什么开始。那是一根大绳子吗?如果是这样,您可以通过在 in 上调用 split() 来获取列表。
  • @MarkMeyer .. 谢谢,它与 split() 一起使用

标签: python-3.x for-loop jupyter-notebook


【解决方案1】:

上述问题存在问题,因为 for 循环将第一行中的所有项目作为一个项目,这就是为什么 .split() 是它的最佳解决方案。阅读请关注https://python-reference.readthedocs.io/en/latest/docs/str/split.html

工作代码:

for i in all_seq_sentences:
    word = i.split()
    print(word[0])

然后再实现另一个循环来访问 model.vector 函数

vec_of_all_seq = []
for sentence in all_seq_sentences:
    sentence = sentence.split()
    for word in sentence:
        vec_of_all_seq.append(mk_model.vector(word))

从 model.vector 派生的向量表示将保存在名为 vec_of_all_seq 的 numpy 数组中。

【讨论】:

    猜你喜欢
    • 2015-09-19
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    相关资源
    最近更新 更多