我是python的新手,所以如果这不是最好/最快的方法,请纠正我。我创建了一个字典,其中为每个键分配了多个值。在codonDict
中,我只包含了一个带有一些值的键(会有更多)。现在我有一个我在这里调用calls
的文件。我想要做的是找到与文件中的#CHROM
对应的密钥,然后搜索键值以查看它是否包含相应的POS
。
codonDict = defaultdict(<type 'list'>, {'HE667775': [106690, 106692, 106694, 106696, 106698, 106700, 106702, 106704, 106706, 106708, 106710, 106712, 106714, 106716, 106718, 106720, 106722, 106724, 106726, 106728, 106730, 106732, 106734, 106736, 106738, 106740, 106742, 106744, 106746, 106748, 106750, 106752, 106754, 106756, 106758, 106760, 106762, 106764, 106766, 106768, 106770, 106772, 106774, 106776, 106778, 106780, 106782, 106784, 106786, 106788, 106790, 106792, 106794, 106796, 106798, 106800, 106802, 106804, 106806, 106808, 106810, 106812, 106814, 106816, 106818, 106820, 106822, 106824, 106826, 106828, 106830, 106832, 106834, 106836]})
calls
档案:
#CHROM POS
HE667775 106824
HE667775 24
因此,从此示例数据中,所需的输出将是HE667775 106824
得到append
到test
我尝试过:
test = []
line = calls.readline()
while len(line) > 1:
#for line in calls:
objects = line.split()
pos = int(objects[1])
chrom = objects[0]
#if scaf in codonDict and pos associated with that key
for scaf, position in codonDict.itervalues():
if pos == position and chrom in scaf:
test.append(line)
print test
错误:
ValueError: too many values to unpack
修改
这是完整的错误追溯,但是线条不同,所以我相信上面代码中的第28行pos = int(objects[1])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 28, in main
ValueError: too many values to unpack
答案 0 :(得分:2)
要检查文件中的pos
是否在condonDict
无需循环,您可以使用python in
按以下方式检查成员资格:
pos in condonDict[chrom]
答案 1 :(得分:2)
所以我不确切知道你的代码在做什么我很确定你会因为这行代码而得到ValueError:
for scaf, position in codonDict.itervalues()
itervalues
为您提供了一个字典值的迭代器。在您的情况下,这是一个列表。但是你不能解包两个变量scaf and position
。
尝试这种方式,不再有ValueError:
for val in codonDict.itervalues()
答案 2 :(得分:0)
要检查chrom是否在codonDict中,请使用之前写过的dm03514之类的in
。我可以用codonDict
作为普通词典来想象这样的事情:
def find(chrom, pos):
if chrom in codonDict:
values = codonDict[chrom]
if pos in values:
print "%i in %s" % (pos, chrom)
else:
print "%i not in %s" % (pos, chrom)
else:
print "chrom %s not found" % chrom