这是我从下面显示的列表中生成字典的方式:
Genes = ['A2M', 'A2M', 'ACADS', 'ACADVL']
Isoforms = ['NM_000014', 'NM_000016', 'NM_000017', 'NM_000018']
ExonPos = ['9220303,9220778,9221335,9222340,9223083,9224954,9225248,9227155,9229351,9229941,9230296,9231839,9232234,9232689,9241795,9242497,9242951,9243796,9246060,9247568,9248134,9251202,9251976,9253739,9254042,9256834,9258831,9259086,9260119,9261916,9262462,9262909,9264754,9264972,9265955,9268359,', '76190031,76194085,76198328,76198537,76199212,76200475,76205664,76211490,76215103,76216135,76226806,76228376,', '121163570,121164828,121174788,121175158,121175639,121176082,121176335,121176622,121176942,121177098,', '7123149,7123440,7123782,7123922,7124084,7124242,7124856,7125270,7125495,7125985,7126451,7126962,7127131,7127286,7127464,7127639,7127798,7127960,7128127,7128275,']
#Length = len(ExonPos)
from collections import defaultdict
d = defaultdict(lambda: defaultdict(list))
for k, iso, exon in zip(Genes, Isoforms, ExonPos):
d[k][iso] = exon.split(",")
length = len(d[exon])
print length
print(d)
这允许我用重复的键制作我的字典。但是,现在我正在尝试查找字典中单个列表的长度,如length = len(d[exon])
所示,但是,我的输出一直给我零。使用我不知道的defaultdict
有什么特别之处吗?也许这是我的python版本(2.7.6)?我尝试了多种不同的方法,但我觉得len()
函数应该有效。
答案 0 :(得分:5)
因为您正在打印d[exon]
的长度而您的defaultdict没有任何名为exon
的密钥,而是您需要:
len(d[k][iso])
然后结果将是:
37
13
11
21
答案 1 :(得分:2)
您需要通过键访问:
length = len(d[k][iso])
exon.split(",")
是值。 d[k][iso]
是访问该值的两个键。
使用普通的dict你会得到一个keyError
但是因为你使用的是defaultdict,你实际上是在临时创建一个键值配对,其中值是一个空列表。