字典中的列表长度(使用defaultdict创建字典)python

时间:2015-04-20 17:09:49

标签: python dictionary

这是我从下面显示的列表中生成字典的方式:

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()函数应该有效。

2 个答案:

答案 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,你实际上是在临时创建一个键值配对,其中值是一个空列表。