簡體   English   中英

從python中的2個列表構建一個布爾字典

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM