2014-12-21 3 views
3

의 수 계산에 대한 사전 지능형리스트 나는 다음과 같은 한이 :파이썬 : 인스턴스

a = rand(100).round() #for example 
count = {} 

for i in a: 
    count[i] = count.get(i, 0) + 1 

# print(a) 
print(count) 

마지막 줄은 내가 루프와 사전 이해를 위해 할 싶습니다 {0.0: 52, 1.0: 48}

뭔가를 반환합니다. 그러나,

count = {i: count.get(i,0)+1 for i in a} 

항상 {0.0: 1, 1.0: 1}

내가 뭘 잘못 반환?

+2

어디에서 rand하고 있습니까? –

답변

2

count = {i: count.get(i,0)+1 for i in a} 

두 부분으로 구성되어 문 :

{i: count.get(i,0)+1 for i in a} 

count = ... 

첫 번째는 사전을 계산하고이를 평가할 때 count은 빈 사전입니다 당신은 먼저 정의하고 t에 의해 생성 된 사전과 아무 관계가 없다. 그는 이해력 표현.

사전 구성이 끝나면 count (공백 사전 대체)에 할당됩니다. 이해 평가 중에 count은 비어 있고 비어 있으므로 모든 get은 항상 0의 기본값을 반환합니다.

작성중인 개체 (예 : 목록 또는 사전)를 참조 할 수있는 방법이 없습니다. 이해력 안에서 사용되는 표현.

+0

감사! 이제는 의미가 있습니다. –

1

나는

count = {} 
count = {i: count.get(i,0)+1 for i in a} 

이해력이 실행

count 이전 라인에서 만든 빈 사전을 의미한다, 당신의 이해 버전은 다음과 같이 생각한다. 따라서 count.get(i,0)은 항상 0을 반환합니다. 그래서 항상 결과는 1입니다. 이전 라인에 정의되지 않은 경우 count 프로그램에 아직 정의되지 않기 때문에, 당신은

NameError: global name 'count' is not defined

을 얻을 것이다.

참고 : 사전 내역에서 생성되는 사전을 참조 할 수 없습니다.

그래서 사전을 업데이트하는 것은 이해에서 작동하지 않습니다. 당신이 실제로 가지고있는 솔루션은 괜찮습니다.

3

Counter이라는 이름을 사용하지 않는 이유는 무엇입니까?

from collections import Counter 

>>> c = Counter([1,1,1,1,1,1,1,1,1,1,1,1,5,4,3,2,3,4,1,3,13,12,13,2,1,13,4,4,4]) 
>>> c 
Counter({1: 14, 4: 5, 3: 3, 13: 3, 2: 2, 5: 1, 12: 1}) 
관련 문제