3

for ループを実行しようとしています。問題が発生しているコードのセクションは次のとおりです。

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を実行することであり、辞書内の「年齢」タプルごとに、タプル内の「項目」ごとに別の for ループを実行します。私が得るエラーは

TypeError: 'int' オブジェクトは反復可能ではありません

4

4 に答える 4

2

単一の int を含むタプル キーは、タプルではなく int として解析されています。したがって、 for item in age を試みると、反復不可能なものを反復しようとしています。リストを[4]使用するか、カンマ(4,)を使用すると、うまくいきます。

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]
于 2013-08-01T16:57:01.400 に答える
1

言いたくないのですが、sihrc も piokuc も間違っています。

次の形式の辞書があります。

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

最初のキー(1,2,3)は、3 つの整数を含むタプルです。2 番目のキー(4)は、値が 4 の単なる整数であり、タプルではありません。タプルを定義する特性は、中括弧ではなく、値を区切るコンマであるためa = 1,2,3、タプルを作成し、それを に割り当てaます。

タプルを中括弧で囲む主な目的は、コードをよりきれいに見せ、単一項目のタプルなどのいくつかのエッジ ケースを単純化することです。

4 を 1 つの項目のタプルに変換するには、少し変わったことをする必要があります。値の後に末尾のコンマを追加します(4,)

ディクショナリ内のすべての単一項目キーに対してこれを行うと、問題なく動作することがわかります。

于 2013-08-01T20:44:14.897 に答える