1
나는 모든 행은 인덱스 (A, B) 다음 내가 원하는 것을목록
a\t12|123|08340|4985
b\t3856|12|276
에 관련된 숫자의 목록이다가 있습니다 경우, 같은 라인 파일이의 사전에 항목을 추가 행에서 같은 번호를 두 개 이상이있는 경우 첫 번째 항목의 값이 난 단지 출력 유전자의 고유 한을 원하고이 출력
12 a
123 a
8340 a
4985 a
3856 b
276 b
주에 도착.
글자를 키로 사용하고 숫자를 값으로 사용하여 사전에 숫자를 추가하려고 시도했습니다. 마지막으로, 해당 문자와 함께 숫자의 set() 만 출력합니다.
uniqueval = set()
d = defaultdict(list)
for line in file:
fields = line.strip().split(\t)
Idx = fields[0]
Values = fields[1].split("|")
for Val in Values:
uniqueval.add(Val)
d[Idx] += Val
for u in uniqueval:
print u,"\t", [key for key in d.keys() if u in d.values()]
스크립트를 실행하지만 사전 조사 때 발의는 모두 같은 문자로 분할됩니다 :이 글은 이후 값이 분할 된 이유를 이해가 안
{'a': ['1','2','1'....], 'b': ['3', '8',....]}
for 루프는 각 Val을 새로운 값으로 가져 와서 dict에 추가 할 것이라고 생각했습니다. 이 문제를 이해하도록 도와 주시겠습니까?
감사합니다.
감사합니다 - 작동하지만'Values'에 발을위한 문자열 목록 중 각 요소를 의미하기 때문에 내 경우는 각 문자를 추가하는 이유를 잘 모르겠어요 그래서 Val은 각 루프 안에 1 개의 문자열입니다 ... 내가 틀렸어? 게다가, 나는 방금 내가 필요로하는 사전을 만들지 않는다는 것을 발견했다. 어떻게 든 많은 가치들이 여러 번 추가되고 훨씬 더 긴 목록을 남기고 - 왜 그런지 모르겠다. – oaklander114
'+ ='는'list.extend()'와 같은 일을합니다; 각 * 요소 *를 가져 와서 하나씩 추가하십시오. 문자열에서 요소는 개별 문자입니다. –
리스트 대신'Idx'에 대해 고유 한 값만 수집하려면'd [Idx] .add (Val)'을 사용하십시오. –