2014-02-16 117 views
0

今天我需要用字典的值2替換字典1的鍵。字典之一有多個鍵,我只想替換匹配字典2的鍵。 最後,我想用舊鍵(不匹配的鍵)和新鍵(已經當他們匹配時更改)用其他字典的值替換字典鍵

我寫了下面的腳本,但沒有輸出,所以我不知道如果我做得對,有人可以向我解釋?

非常感謝

ERCC = {} 
my_file = open('a.txt') 
for line in my_file: 
    config,name = line.strip().split() 
    ERCC[contig] = name 

RSEM = {} 
names_file = open('b.txt') 
for line in names_file: 
    genes, count = line.strip().split() 
    RSEM[gene] = count 

def convert(RSEM,ERCC): 
    for key, value in RSEM.items(): 
     for keys, values in ERCC.items(): 
      if keys == key: 
       RSEM[key] = values 
    return RSEM 
    print RSEM 

convert(RSEM, ERCC) 
+0

匹配值或密鑰? – thefourtheye

+0

沒有輸出:'print'語句低於'return'語句;從未執行過。 – falsetru

+0

確實如此,如果我在轉換(RSEM,ERCC)行之後寫入打印RSEM,它會用新鍵寫入字典 – user3188922

回答

0

下面是一個雙內膽爲轉換功能:

RSEM = {key: ERCC.get(key, RSEM[key]) for key in RSEM} 
print RSEM 

轉儲字典到一個文件只是做:

with open("your_file_name", "w") as dumpfile: 
    dumpfile.write(str(RSEM)) 
+0

謝謝,這兩行絕對比較容易!我想知道如何將字典打印到文本中,但保留了輸入文件中的製表符和行,每個鍵在不同的行上。 – user3188922

+0

'json'模塊適用於這些目的。試試這個:'print json.dumps(RSEM,indent = 4,sort_keys = True)' –

0

您的代碼似乎很好。但是您已在print聲明之前使用return聲明。 convert函數的執行在return ***處停止,並且根本不執行打印語句。這就是你沒有得到任何輸出的原因。

+0

謝謝我不知道! – user3188922

1
 >>> dic={} 
    >>> for k,v in myboi.items(): 
r=input("Enter item to Update write in ""=") 
if r: 
    dic[r]=v 
else: 
    dic[k]=v 
    Enter item to Update write in ="Mahesh" 
    Enter item to Update write in ="Saka" 
    >>> 
    >>> dic 
    {'Mahesh': 'Mahesh', 'Saka': 'Mahesh'} 
    You want compulsary input key in this program you want update one or more time you empty dic={} 
    result={'Mahesh': 'Mahesh', 'Saka': 'Mahesh'} 


    >>> fi.close() 
    >>> fi=open("m.txt","r") 
    >>> fi.readlines() 
    ['Maheshname'] 
    >>> fi=open("m.txt","w+") 
    >>> for k,v in myboi.items(): 
fi.write("'"+k+"'"+":"+"'"+v+"'") 


    >>> fi.close() 
    >>> fi=open("m.txt","r") 
    >>> fi.readlines() 
    ["'Mahesh':'Mahesh''name':'Mahesh'"]