2014-01-06 54 views
1

我試圖在比較2個列表中的元素時使用值爲'True'或'False'的字典。這可能是有點基本的,但我是新的編碼,我不明白爲什麼它總是分配「真」值,即使我可以看到它不是真的:從python中的2個列表構建一個布爾型字典

letters = [A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z] 

randomData = [] 

f = open('randomData.txt', 'r') 
for line in f: 
     randomData.append(line.rstrip().split()[0]) 
f.close() 

的「randomData.txt」文件看起來像:

A'\t'0003'\t'0025'\t'chr1 
B'\t'0011'\t'0021'\t'chr7 
D'\t'0043'\t'0068'\t'chr3 
F'\t'0101'\t'0119'\t'chr7 

的randomData名單現在應該是這樣的:

['A','B','D','F'] 

我想:

sameLetters = {} 

i=0 
while i < len(letters): 
    if letters[i] and randomData: 
     #append to dictionary 
     sameLetters[letters[i]] = 'True' 
    else: 
     #append to dictionary 
     sameLetters[letters[i]] = 'False' 
    i=i+1 

print sameLetters 

我希望是這樣的:

{'A': 'True', 'B': 'True', 'C': 'False', 'D': 'True', 'E': 'False', 'F': 'True', 'G': 'False', etc 

而不是在字典中的所有值都是 '真'。任何人都可以看到問題嗎?或給任何指針或解釋?任何幫助將是偉大的,非常感謝。

+2

爲什麼要用 「真」 和「假「,當你可以使用」真「和」假「? – shx2

+0

如果你的行確實包含'A'\ t'0003'\ t'0025'\ t'chr1',那麼你的'randomData'列表將會有'['A'「,'B'」,'C'「]''相反,例如一封信和一個引號字符。 –

+0

那麼因爲randomData和letters [i]都不爲空,所以兩者都返回true。 –

回答

1

我想你想要做的事,如:

sameLetters = {l: l in randomData for l in letters} 

,因爲你檢查

if letters[i] and randomData: 
      #^should be in 

和Python解釋都非您當前的嘗試不起作用 - 空字符串(letters[i])和非空列表()爲真。

另外,還要注意letters已經可以在Python:

from string import ascii_uppercase 

這是一個字符串,但你可以遍歷和索引字符串就像一個列表,in仍然可以工作。

+0

這很好。非常感謝! – user3062260

4

也許你的意思if letters[i] in randomData

+0

謝謝,這對我來說算法上更有意義,但它返回所有虛假 – user3062260

+0

啊我現在看到,是的這個工程,有一個問題與TXT文件格式!謝謝 – user3062260

0

好像你只關心其中字母出現在你的隨機數據中,爲什麼不使用set

from string import ascii_uppercase 

randomData = ['A', 'B', 'D', 'F', 'A'] 

appeared = set(ascii_uppercase).intersection(set(randomData)) 
print appeared 

而且以後你能給我們這樣的:

char = 'z' 
if char in appeared: 
    print 'yes' 
else: 
    print 'no' 

編輯:

那麼這個怎麼樣:)

from string import ascii_uppercase 

randomData = ['A', 'B', 'D', 'F', 'A'] 

appeared = set(ascii_uppercase).intersection(set(randomData)) 

d = dict(zip(ascii_uppercase, (False,) * 26)) 

for key in appeared: 
    d[key] = True 

print d 
+0

這些字母只是我實際問題中更復雜數據的表示。不過謝謝 – user3062260

相關問題