2014-01-06 3 views
1

두리스트의 요소를 비교할 때 값이 'True'또는 'False'인 사전을 만들려고합니다. 이것은 아마도 조금 기본적인하지만 코딩에 새로 온 사람과 항상 '참'값을 할당 이유가없는 사실 볼 수 있지만 이해가 안 :파이썬에서 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','B','D','F'] 

: 같은

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': 'True', 'B': 'True', 'C': 'False', 'D': 'True', 'E': 'False', 'F': 'True', 'G': 'False', etc 

가 대신 사전에있는 모든 값이 '참'입니다

내가 좋아하는 뭔가를 기대했다. 누구든지 문제를 볼 수 있습니까? 아니면 어떤 설명이나 설명을 주시겠습니까? 어떤 도움이라도 대단히 감사 할 것입니다.

+2

""참 "과 False "를 사용할 수 있습니까? – shx2

+0

'A '\ t'0003'\ t'0025 '\ t'chr1' 행에'A', B ', C' ']'' 대신 예 : 편지 및 견적 문자. –

+0

randomData도 letters [i]도 null이 아니기 때문에 둘 다 true를 반환합니다. –

답변

1

난 당신이 그런 짓을 할 생각 의미 :

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

당신이

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

을 확인하고 파이썬은 모두 비를 해석하기 때문에 현재 시도가 작동하지 않습니다 빈 문자열 (letters[i]) 및 비어 있지 않은 목록()을 True로 설정하십시오. 또한

letters 파이썬에서 이미 사용할 수 있습니다 :

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

관련 문제