2016-08-01 5 views
-4

私はループで実行していて、文字列を解析しています。その文字列には最終的にホスト上で実行されるホストとアプリケーションの2つの項目が含まれます。予想どおり、ホストは複数のアプリケーションを実行します。私はホストをキーとして使用する1つのデータ構造にすべてを格納したいと思います。ループでPythonを使用してHashMapを構築する。明確化が必要

以下は失敗した試行です。最後の要素だけがhost = app形式で保存されている理由を理解してください。

What i expect to see 
host = app1, app2 etc 
What i see 
Host = app2 (always last) 


data = dict() 

def add(line): 
    l = line.split("/") 
    host = l[0].strip() 
    app = l[-1].strip() 

    data[host].append(app) 

for entry in env: 
    if "/" not in entry: continue 
    add(entry) 

print data 
+1

可能な複製を支援しようとしているすべての人々に感謝し、[作業をcollections.defaultdictんどのように?](http://stackoverflow.com/questions/5900578/how-does-collections-defaultdict-work) –

+1

これは、最後の項目を返すだけでなく、 'KeyError'で失敗するでしょう。これには本当に[mcve]が必要です。 –

答えて

1

問題は、あなたがこれを実行すると、data[host]の値が設定されていないdata[host]

として格納されたリスト(または類似)にappの値を追加するだろうdata[host].append(app)

であり、そしてあなたがすることができます'appendへ。 KeyErrorが表示されます。おそらくdata[host] = appを意味するのでしょうか?または...

try: 
    data[host].append(app) 
except KeyError: 
    data[host] = [app] 
+0

それを試みた。これは、リストの最後の値を設定します。 5つの要素を反復すると、5つ目の要素だけが追加されます。 – JAM

+0

リストに追加しようとすると「試行できます」が動作しない場合は、新しいリストを開始します。 –

0

data[host].append(app)

あなたは、ホストは、あなたがそれに追加初めて真実ではありません辞書、であると仮定します。

+0

このチェックでは、データ内のホストの場合、エラーが発生します。 data [ホスト] .append(アプリ) else: data [host] = app' – JAM

0

これは私が探していたものです。

if host in data: 
    data[host].append(app) 
else: 
    data[host] = [app] 
関連する問題