2017-02-25 9 views
0

빈 사전이 있는데, 이는 업데이트 방법으로 조작하고 있습니다. 변수로 키를 사용하고 +1을 값으로 사용하고 있습니다. 아래를 참조하십시오 :dict.update()가 예상대로 작동하지 않습니다.

myDict, var = {}, 10 
myDict.update({ var : +1 }) 

두 번 실행 해 봅시다. myDict = {10 : 2}이 필요합니다. 대신 {10 : 1}입니다.

는 내가 직접이 일을하여이 문제를 해결할 수 있습니다 이해 :

myDict[var] += 1 
print (myDict) 
{10 : 2} 

그러나, var 내가 증가 싶습니다 10는 항상 아니라, var는 숫자가 될 수 있습니다. 10 이외의 숫자 인 경우 키가 사전에 없으므로 KeyError이 표시됩니다.

키를 변수로 사용하여 사전을 업데이트하고 값을 1으로 설정하려면 어떻게해야합니까? 그러나 키가 이미 myDict에 존재하는 경우 대신 해당 값을 증가 시키시겠습니까?

나는 try와 except 문을 통해이 작업을 이미 마쳤지만 매우 Pythonic하지는 않습니다.

try: 
    myDict[var] += 1 
except: 
    myDict.update({ var : 1 }) 

이렇게하면 var의 값이 1 씩 증가합니다. 키가 존재하지 않으면 myDict이 대신 키를 생성하고 값을 하나로 설정합니다. 더 좋은 방법이 있습니까?

답변

3

당신은 카운터를 요구하고 있습니다; 파이썬은 collections 모듈에 당신을 위해 이것을 제공 :

from collections import Counter 

c = Counter() 
var = 10  
c.update({var: 1}) 
print(c) # Counter({10: 1}) 
c.update({var: 1}) 
print(c) # Counter({10: 2}) 

당신은 당신이 원하는 단, Counter 옵션은, 내 의견으로는,이 경우 명확한 경우 d[var] = d.get(var, 0) + 1를 사용하여 일반 딕셔너리와 같은 결과를 얻을 수 있습니다 .

+0

아주 잘 작동합니다. 팬더 데이터 프레임에 카운터를 추가 할 수 있습니까? 프로그램 끝 부분에서이 작업을 수행하고 싶습니다. –

+0

데이터 프레임은 사전을 입력으로 사용할 수 있으므로 어떤 이유로 든 카운터를 수락하지 않으면 놀랄 것입니다. 그렇지 않다면'dict (c)'를 사용할 수 있습니다. –

+0

@AugustWilliams 카운트가 스칼라 인 것처럼 보이는 경우 색인을 전달하기 만하면됩니다 (예 : 'pd.DataFrame (Counter ([4, 5, 2, 4, 5]), index = [0])' – miradulo