0

今日、この質問をしました: 異なるキーの辞書内の値を評価する

私が使用している辞書の構造が変更されたため、これに対応するために与えられたソリューションを変更しようとしました。

以前の構造は次のとおりです。

locsOne = {1: [100], 2: [200], 3: [250]}

しかし、現在は次のように変更されています。

locsone = {1: [[100]], 2: [[200]], 3: [[250]]}

locsOne ディクショナリに hasersine 式を適用しようとしています。key:value から他の key:values までの距離を取得します。それらが 450 より大きい場合は、結果ディクショナリに含めるべきではありません。

結果の辞書は次のようになります。

locsTwo = {1: {2: 100, 3: 150}, 2: {1: 100, 3: 50}, 3: {1: 150, 2: 50}}

これは私が受け取ったコードです (falsetru のおかげで):

for k1 in locsOne:
    v1 = locsOne[k1][0]
    locsTwo[k1] = {k2: abs(v1 - locsOne[k2][0]) for k2 in locsOne
                   if k1 != k2 and abs(v1 - locsOne[k2][0]) <= 450}
print(locsTwo)

それを変更しようとすると、「IndexError: list out of range」や「KeyError」などのエラーが返されます。

私の最後の変更は次のとおりです。

for k1 in locsOne:
        v1 = locsOne[k1][1]
        locsTwo[k1] = {k2: harvesineForm(v1 , locsOne[k2][1]) for k2 in locsOne
                   if k1 != k2 and abs(v1 - locsOne[k2][0]) <= 450}

どんな助けでも大歓迎です。

4

1 に答える 1

0
a = [[100]]
print a       # [[100]]
print a[0]    # [100]
print a[0][0] # 100

値には、リスト内にネストされたリスト内の単一の値が常に含まれるという仮定に従います。

locsOne = {1: [[100]], 2: [[200]], 3: [[250]]}
locsTwo = {}

for k1 in locsOne:
    v1 = locsOne[k1][0][0]
    locsTwo[k1] = {k2: abs(v1 - locsOne[k2][0][0]) for k2 in locsOne
                   if k1 != k2 and abs(v1 - locsOne[k2][0][0]) <= 450}
print(locsTwo)

[0]リストのレベルがもう 1 つあるため、リストの最初の値 ( ) に再度アクセスする必要があります。

于 2014-08-31T20:23:15.823 に答える