Python:使用来自不同输入的键和值创建一个词典

时间:2015-09-17 03:14:26

标签: python dictionary web

我有一个脚本,它根据ID列表查看不同的webtext URL。 我想在每个文本页面(\ sC :)之后的字符串中提取特定信息。 到目前为止,我能够将这些字符串输出存储在列表中,但是跟踪搜索到的原始ID与结果输出之间的对应关系并不是最好的。 我想创建一个字典而不是列表,其中ID作为键被搜索,相应的输出作为值。

到目前为止,这是我的脚本:

import urllib2
import sys
import re

IDlist = ['C9JVZ1', 'C9JLN0', 'C9J872']

URLlist = ["http://www.uniprot.org/uniprot/"+x+".txt" for x in IDlist]
function_list = []
for item in URLlist:
    textfile = urllib2.urlopen(item)
    myfile = textfile.readlines();
    for line in myfile:
        print "line:", line;
        found = re.search('\s[C]:(.+?);', line);
        if found:
            function = found.group(1);
            function_list.append(function)

我得到的输出是:

['cytosol', 'nucleus', 'transcription factor complex']

http://www.uniprot.org/uniprot/C9JVZ1.txt

中找不到任何内容 在http://www.uniprot.org/uniprot/C9JLN0.txt

中找到

Cytosolhttp://www.uniprot.org/uniprot/C9J872.txt

中找到了

nucleustranscription factor complex

我正在寻找的输出类似于:

{'C9JVZ1':[], 'C9JLN0':['cytosol'], 'C9J872':['nucleus', 'transcription factor complex']}

我试过了:

if found:
            function = found.group(1);
            function_dic = {item:[function]}

但我得到了这个输出:

>>> function_dic
{'http://www.uniprot.org/uniprot/C9J872.txt': ['transcription factor complex']}

1 个答案:

答案 0 :(得分:1)

function_dic = {item:[function]}

这会在每个循环中用最后一个条目覆盖字典,以修复你要执行的操作:

function_dic[item] = [function]

但这只是每次都会覆盖这个值,所以你只有一个函数,所以为了解决这个问题,你会这样做:

function_dic[item].append(function)

但是你需要在内部for循环之外初始化它:

function_dic[item] = []

您提到您希望ID不是URL,因此您可以更改外部for循环以包含ID并使用它来构建字典,因此将它们放在一起:

function_list = {}
for id, item in zip(IDlist, URLlist):
    function_list[id] = []
    ...
    for line in myfile:
        ...
        if found:
            function = found.group(1)
            function_list[id].append(function)