在比较2个列表中的元素时,我正在尝试创建一个值为'True'或'False'的字典。这可能有点基础,但我是编码的新手,我不明白为什么它总是指定'真'值,即使我看到它不是真的:
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”。有谁能看到这个问题?或者给出任何指示或解释?任何帮助都会很棒,非常感谢。
答案 0 :(得分:4)
也许你的意思是if letters[i] in randomData
答案 1 :(得分:1)
我想你想做点什么:
sameLetters = {l: l in randomData for l in letters}
您当前的尝试不起作用,因为您检查
if letters[i] and randomData:
# ^ should be in
并且Python将非空字符串(letters[i]
)和非空列表(randomData
)解释为True。
另请注意,letters
已在Python中提供:
from string import ascii_uppercase
这是一个字符串,但您可以像列表一样迭代并索引字符串,in
仍然有效。
答案 2 :(得分: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