[英]building a boolean dictionary from 2 lists in python
當比較2個列表中的元素時,我正在嘗試使用值'True'或'False'創建字典。 這可能有點基礎,但是我是編碼的新手,我不明白為什么它總是分配'True'值,即使我看到它不是真的:
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
而是字典中的所有值均為“ True”。 誰能看到這個問題? 或提供任何指示或解釋? 任何幫助將是巨大的,非常感謝。
也許您的意思是if letters[i] in randomData
我認為您想執行以下操作:
sameLetters = {l: l in randomData for l in letters}
您當前的嘗試無效,因為您檢查了
if letters[i] and randomData:
# ^ should be in
Python將非空字符串( randomData
letters[i]
)和非空列表( randomData
)都解釋為True。
另外,請注意, letters
已經在Python中可用:
from string import ascii_uppercase
這是一個字符串,但是您可以像列表一樣遍歷並索引一個字符串,並且in
仍然可以工作。
似乎您只關心隨機數據中出現哪個字母,那么為什么不使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.