2011-12-30 107 views
0

我正在寫一個函數,它將接受一個參數,並且還包括一個字典。我希望字典的名稱基於輸入文件的名稱。說輸入文件是input.xml,我想字典的名稱是input。理想情況下我會用這樣的:在函數中定義字典名稱

def function(input): 
    for x in y: list(get value) 
    input[:4][key] = [value] 

,如果你知道一個更好的方式來做到這一點,但我現在使用的是功能的額外的名字,我想知道:

def function(input, dictname): 
    for x in y: list(get value) 
    dictname[key] = [value] 

現在我只是給我的函數添加了第二個名字,但我想知道是否有辦法做到這一點,以減少輸入。


編輯


我包括函數的更長的版本我使用這樣你們可以獲取上下文。這使用BioPython模塊遍歷XML文件的匹配。我使用[temp]來保存每個查詢的匹配,然後爲每組查詢/匹配創建一個字典。我希望這個詞典的命名與我的輸入文件相同。

from Bio.Blast import NCBIXML 

def make_blast_dictionary(blastxml, maxhits, blastdict): 
    temp=[] 
    for record in NCBIXML.parse(open(blastxml):  
     for number, align in enumerate(record.alignments): 
      if number == int(maxhits): break 
      temp.append(str(align.title).split("|")[1]) 
    blastdict[str(record.query_id)] = [temp] 
+1

老實說,這並沒有太大的感覺給我。爲什麼不只是從你的函數返回一個字典? – Xion 2011-12-30 18:22:19

+0

字典的名稱是什麼?你的意思是變量的名字?如果是這樣,你想做什麼? – 2011-12-30 18:22:35

+1

請更清晰地重寫您的問題。 – 2011-12-30 18:24:25

回答

4

關於命名變量的事情是,你可以給他們打電話,只要你喜歡。最好將它們命名爲特定於您正在使用它們的上下文。

這將是一個更好的舉措,而不是簡單地從您的方法返回字典。

-1
def make_name(input): 
    return = input.split('.')[0] 

def function(input): 
    """Note: this function is incomplete and assumes additional parameters are in your original script 
    """ 
    for x in y: list(get value) 
     dict_name[key] = [value] 
    return dict_name 

def make_dict(input): 
    dict_name = make_name(input) 
    dict_name = {} 
    dict_name = function(input) 
    return dict_name 

這是你所需要的?

1

其他受訪者合法關心爲什麼你想做到這一點,或者是否應該做到這一點。話雖這麼說,這裏是你能怎麼做到這一點:

import os.path 

def function(filename): 
    d = {'red': 10, 'blue': 20} 
    name, ext = os.path.splitext(filename) 
    globals()[name] = d 

function('input.xml') 
print input 
+0

您還必須確保文件名不以數字開頭。 – Rotem 2011-12-30 19:08:46

+0

@Rotem上述代碼仍然適用於以數字開頭的名稱。動態創建的名稱也會動態查找(如果您事先知道該名稱,則可以直接分配)。 – 2011-12-30 19:47:52

+0

這很酷,不知道你可以動態地分配一個無效的名字,謝謝。 – Rotem 2011-12-30 21:28:28

相關問題