用python中的两个列表构建布尔字典

2024-09-24 22:24:48 发布

您现在位置:Python中文网/ 问答频道 /正文

在比较两个列表中的元素时,我正在尝试创建一个值为“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()

是的随机数据.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”。有人看到问题了吗?或者给点建议或者解释?任何帮助都会很好,非常感谢。你知道吗


Tags: totxtfalsetrue元素编码列表dictionary
3条回答

似乎您只关心哪个字母出现在随机数据中,那么为什么不使用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

我想你应该做一些类似的事情:

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仍然有效。你知道吗

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

相关问题 更多 >