2013-08-01 3 views
2

for 루프를 실행하려고합니다."Int"개체가 반복 가능하지 않습니다.

aldurstengd_ororka = {(18, 19, 20, 21, 22, 23, 24):1, (25):0.95, (26):0.90, 
    (27):0.85, (28, 29):0.75, (30, 31):0.65, (32, 33):0.55, (34, 35):0.45, 
    (36, 37):0.35, (40, 41, 42, 43, 44, 45):0.15, (46, 47, 48, 49, 50):0.10, 
    (51, 52, 53, 54, 55):0.075, (56, 57, 58, 59, 60):0.05, (61, 62, 63, 64, 
    65, 66):0.025} 

for age in aldurstengd_ororka.keys(): 
    for item in age: 
     if ororkualdur == item: 
      baetur = baetur + ororkulifeyrir * aldurstengd_ororka([age]) 

그래서 내 의도는 aldurstengd_ororka를 통해 실행하는 것입니다, 그리고 사전에 각 "시대"튜플, 나는 각 "항목"에 대한 루프 다른 실행 : 여기에 문제가있어 내 코드의 섹션입니다 터플 내부. 내가 오류가

형식 오류입니다 :

aldurstengd_ororka([age]) 

오류입니다 : aldurstengd_ororka 다음이 표현 사전이 'INT'객체는

+0

사용중인 프로그래밍 언어로 태그를 추가하면 도움이 될 것입니다. – alfasin

+0

@alfasin은 파이썬처럼 보입니다. – sdamashek

+0

죄송합니다, 예. 파이썬. – KSHMR

답변

4

반복 가능한 없습니다.

aldurstengd_ororka[(age)] 

편집 : : 아마도 당신은 같은 것을 의미 당신이보고 된 오류는 매우 재미있다,이 조각으로 재현 않았다

for age in aldurstengd_ororka.keys(): 
    print 'age:', age 
    for item in age: 
     print item 

코드의 출력은 다음과 같습니다

age: (32, 33) 
32 
33 
age: (36, 37) 
36 
37 
age: (51, 52, 53, 54, 55) 
51 
52 
53 
54 
55 
age: (61, 62, 63, 64, 65, 66) 
61 
62 
63 
64 
65 
66 
age: (30, 31) 
30 
31 
age: 25 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 

/home/ma/mak/Documents/t.py in <module>() 
     3 for age in aldurstengd_ororka.keys(): 
     4  print 'age:', age 
----> 5  for item in age: 
     6   print item 
     7 

TypeError: 'int' object is not iterable 

그래서, 파이썬은 age 변수에 할당 할 때 1 요소의 튜플을 '압축 해제'합니다. 그래서 (25) 대신 나이가 들겠습니다. 예상대로, 25 ... 조금 이상합니다. 그 대신 튜플의 int로서 구문 분석되고 단지 단일의 int를

for age in aldurstengd_ororka.keys(): 
    # if not tuple, make it a tuple: 
    if not type(age) == type((0,1)): age = (age,) 
    print 'age:', age 
    for item in age: 
     print item 
+0

감사합니다 !!! 정말 감사합니다. – KSHMR

+0

반갑습니다. – piokuc

+0

도 나를 위해 일했습니다. (!) 내 자신의 (다소 다른) 질문을 제출하기 직전에 이것을 발견했습니다. – juggler

2

귀하의 튜플 키 : 해결 방법은 그런 짓을하는 것입니다. 그래서 당신이 나이에 아이템을 찾으려고 할 때, 당신은 반복 불가 (iterate)가 아닌 반복을 시도하고 있습니다. 목록 [4]를 사용하거나 쉼표 (4,)를 사용하고 트릭을 할 것입니다 :이 말을 싫어하지만, sihrc 및 piokuc 모두 잘못

aldurstengd_ororka = {(18, 19, 20, 21, 22, 23, 24):1, (25):0.95, (26):0.90, 
    (27):0.85, (28, 29):0.75, (30, 31):0.65, (32, 33):0.55, (34, 35):0.45, 
    (36, 37):0.35, (40, 41, 42, 43, 44, 45):0.15, (46, 47, 48, 49, 50):0.10, 
    (51, 52, 53, 54, 55):0.075, (56, 57, 58, 59, 60):0.05, (61, 62, 63, 64, 
    65, 66):0.025} 

for age in aldurstengd_ororka.keys(): 
    if isinstance(age, [tuple, list]): 
     for item in age: 
      if ororkualdur == item: 
       baetur = baetur + ororkulifeyrir * aldurstengd_ororka[age] 
    else: 
     baetur = baetur + ororkulifeyrir * aldurstengd_ororka[age] 
+0

감사! :) 이것은 문제를 해결했습니다. – KSHMR

0

.

d = { (1,2,3) : "a", 
     (4) : "b" 
    } 

첫 번째 키 (1,2,3)이 3 개 정수와 튜플 :

당신은 형식의 사전이있다. 두 번째 키 (4)은 값이 4 인 이 아닌 정수이며 튜플은이 아닙니다. 터플의 정의 특성은 중괄호가 아닌 값을 구분하는 쉼표이므로 a = 1,2,3은 튜플을 만들고 a에 할당합니다.

튜플 주위의 중괄호의 주된 목적은 코드를보다 깨끗하게 보이게하고 단일 항목 튜플과 같은 일부 가장자리 사례를 단순화하는 것입니다.

4를 단일 항목 튜플로 변환하려면 약간 이상한 작업을 수행하고 값 뒤에 후행 쉼표를 추가해야합니다 (예 : (4,)).

사전의 모든 단일 항목 키에이 작업을 수행하면 해당 항목이 정상적으로 작동하는지 확인해야합니다.

0

사전 키는 튜플 및 때로는 정수입니다. @ 사이먼 칼란 (Keith Callan)은 모든 키를 반복 할 수 있도록 쉼표를 숫자에 추가 할 수 있다고 언급했기 때문에

사전을 편집하고 싶지 않은 경우 항상 반복 가능 문자를 반환하는 more_itertools 라이브러리의 도구를 사용하십시오.

감소 예 :

import more_itertools as mit 

d = { 
    (18, 19, 20, 21, 22, 23, 24): 1, 
    (25): 0.95, 
    (26): 0.90, 
    (27): 0.85, 
    (28, 29): 0.75, 
} 

for age in d: 
    for item in mit.always_iterable(age): 
     # Add logic here 
     pass 

# No TypeError 

자세한 것은 the docs를 참조하십시오.

관련 문제