2017-06-30 12 views
0

私はループ内で試してきました。真のループ、次の間などです。情報が何度も何度も繰り返されるか、素子。私はSOとgoogleで解決策を探したが、成功しなかった。私がやろうとしています何別のリストからの各値を使用して、Pythonリストのルックアップ要素

はこれです:

for feature in parJson: 
    ids = feature['properties']['id'] 
    event = feature['properties']['event'] 
    headline = feature['properties']['headline'] 
    expires = feature['properties']['expires'] 
    areaDesc = feature['properties']['areaDesc'] 
    geoCodes = feature['properties']['geocode']['UGC'] 

    states = alerts.getZones(geoCodes) 

def getZones(self, getZones): 
    zones = json.loads(open("resources/zones.json").read()) 
    parsedZones = zones['features'] 
    #TODO figure out how to compare this list! 
    states = [] 
    for ugcCode in getZones: 
     ugcCode = str(ugcCode) 
     for element in parsedZones: 
      ugc = element['properties']['id'] 
      state = element['properties']['state'] 
      if ugc == ugcCode: 
       states.append(state) 
       break 

    print(states) 

getZones UGCジオコードゾーンのリストです。 parsedZonesはapi.weather.gov/alerts/activeの警告警告のjsonリストです。

とデータ:

parsedZones:https://api.weather.gov/zones(それはとても大きいので、ディスクにダウンロード)

parJson:https://api.weather.gov/alerts/active

アクティブアラートのリストから、私はUGCコードを取得警告は有効です。 APIは状態を与えず、それらのコードだけを与えます。だから私はコードを状態名にデコードする必要がある。私はすでに州名/略語のある辞書を持っています。私が必要とするのは、警告に列挙されているUGCコードに基づいたユニークな状態のPythonセットです。状態を取得したら、省略形を使って各状態名を検索し、状態を表示することができます。だからこのようになる:

テキサス州とオクラホマ州に警告があるとしましょう。提供されるコードはOKC001とTXC001です。最初の2文字を得るためにstartswithを使うことはできません。なぜなら、いくつかの領域は州の省略形で始まらないからです。したがって、私はサーバーにダウンロードしたapiによって提供されるゾーンリストを使用する必要があります。私は一度に1つずつ提供される各コードを検索し、2文字の略語を取得する必要があります。私はそれを取得した後、私はそれを使用することができます。しかし、私はそれを動作させるように見えることはできません。目標は、各状態の省略形をセットに追加して一意の値を取得することです。

私がこれまで行ったことの最終結果はこれです:

[] None 
Severe Thunderstorm Watch 
Windsor; Orange; Rutland 
[] None [] None 
Flood Warning 
DeKalb; Marshall 
['IN', 'IN', 'IN'] None 
Special Weather Statement 
Miami; Wabash; Huntington 
['PA', 'PA', 'PA'] None 
Special Weather Statement 
Wyoming; Lackawanna; Luzerne 
[] None 
Flood Advisory 
Sequoyah 
['NY', 'NY', 'NY', 'NY', 'NY', 'NY', 'NY'] None 
Special Weather Statement 
Onondaga; Madison; Northern Oneida; Southern Oneida; Cortland; Otsego; Chenango 
+0

"for"ループでループするたびに、以前の実行から情報を上書きします。このコードは、それらの変数のすべてを、最後に見た値に対応する変数として設定します。 – mauve

+0

ありがとうございました。私は同じ結果を持つ変数を設定せずにこれを試してみました。基本的には、状態がリストされた行と、状態がリストされていない行があります。私はこれが上書きによって引き起こされたと推測しています.. – JasonG

+0

あなたが望む出力は何ですか? – mauve

答えて

0

あなたの問題は、ループがあなたを介してループしている各要素ごとに上書きされるすべての変数が得られていることです。

states = [] 
for feature in parJson: 
    ... 
    states.append(alerts.getZones(geoCodes)) 
print(states) 

これにより、該当する状態のリストが表示されます。あなたは上書きするのではなく、追加の情報がある場合に追加するリストであることを知りたいさまざまな項目をキーとするネストされた辞書にすべてを保存することができます。

+0

ありがとう、私は昼食後にこれを試し、何が起こるかを教えてくれます。 – JasonG

+0

さて、ループはHTMLテンプレートをレンダリングするので、ループの内部に状態を表示する必要があります。しかし、私は先に進んでクラスメソッドにリストを追加しました。私が得ることは本質的に私が以前に得たものです。これはほとんどの要素の状態を表示しません。時にはそれらを印刷するだけです。私は私の質問を更新して、私が何を意味するのかを示します。 – JasonG

0

問題が見つかりました。私はゾーンで新しいファイルをアップロードしましたが、実際に古いファイルを上書きしませんでした。ファイルを取得するためにwgetを使用し、問題を解決しました。彼らの提案について@mauveに感謝します。正しいデータが得られたら、私の問題に役立ちました。

関連する問題