2015-11-01 71 views
0

我在理解這裏發生了什麼問題。爲什麼zip只返回兩個項目(Python 3)

networkfile="http://regulondb.ccg.unam.mx/menu/download/datasets/files/network_tf_gene.txt" 

i = 36 

lista = [] 

for n in range(0,8): 

    data = urllib.request.urlopen(networkfile).readlines()[i] 
    line = data.decode('utf-8') 
    line2 = line[0:5] 
    lista.append(line2) 
    i = i + 1 

print(lista) 

values = [] 

for i in range(0,8): 

    values.append('') 

print(values) 

d = dict(zip(lista,values)) 

print(d) 

我知道這是遠離最有效的方式來處理此類問題,但我很新的這所以現在這個必須做。

我的問題是,輸出的樣子:

'AccB\t', 'AccB\t', 'AcrR\t', 'AcrR\t', 'AcrR\t', 'AcrR\t', 'AcrR\t', 'AcrR\t'] 

['', '', '', '', '', '', '', ''] 

{'AccB\t': '', 'AcrR\t': ''} 

前兩個表的正常工作,由打印命令所暗示的,但只要我壓縮這兩個名單,並創建一個字典他們,字典只包含每個列表中的兩個元素,我不知道爲什麼這是我試圖找出幾個小時後。

其他提示&改進建議也非常感謝。謝謝。

+0

添加您的示例輸出 –

回答

0

我建議將代碼分解爲邏輯步驟,而不是在同一行中執行多個步驟。然後你會看到zip沒有給你兩個項目,它是dict

lista = ['AccB\t', 'AccB\t', 'AcrR\t', 'AcrR\t', 'AcrR\t', 'AcrR\t', 'AcrR\t', 'AcrR\t'] 
values = ['', '', '', '', '', '', '', ''] 
>>> list(zip(lista, values)) 
[('AccB\t', ''), ('AccB\t', ''), ('AcrR\t', ''), ('AcrR\t', ''), ('AcrR\t', ''), ('AcrR\t', ''), ('AcrR\t', ''), ('AcrR\t', '')] 

所以你看,你會得到所有的預期值。但是當你把它放到字典中時,你有許多相同的密鑰,所以它們會被覆蓋。一本字典只能給出每個鍵的一個。

>>> dict(_) 
{'AcrR\t': '', 'AccB\t': ''} 

'AcrR\t''AccB\t'是唯一的兩個鍵,所以在字典中,每次都會出現一次。

相關問題