2016-10-09 1 views
2

私は、ファイルを作成しようとしている:python3で整理したファイルを辞書にするにはどうすればいいですか?

{'e': {'d'}, 'a': {'b', 'c'}, 'd': {'g'}, 'b': {'d'}, 'c': {'f', 'e'}, 'f': {'g', 'd'}}. 

などの辞書の中へ

c;f 
b;d 
a;c 
c;e 
d;g 
a;b 
e;d 
f;g 
f;d 

私が今使っているコードは

def read_file(file : open) -> {str:{str}}: 
f = file.read().rstrip('\n').split() 
answer = {} 
for line in f: 
    k, v = line.split(';') 
    answer[k] = v 
return answer 

以下のようなものです。しかし、それは私を与えます{'f': 'g', 'a': 'c', 'b': 'd', 'e': 'd', 'c': 'e', 'd': 'g'} どうすれば修正できますか?

答えて

2

辞書はあなたが伝統的なアプローチを好むならば、あなたはif条件

>>> answer = {} 
>>> for line in f: 
...  k,v = line.split(";") 
...  if k in answer: 
...   answer[k].add(v) 
...  else: 
...   answer[k] = {v} 
... 
>>> answer 
{'b': {'d'}, 'd': {'g'}, 'f': {'d', 'g'}, 'e': {'d'}, 'a': {'c', 'b'}, 'c': {'f', 'e'}} 
+0

を追加することができます。しかし、私はまだ疑問持っdefaultdict here

>>> import collections >>> answer = collections.defaultdict(set) >>> for line in f: ... k, v = line.split(";") ... answer[k].add(v) ... >>> answer defaultdict(<class 'set'>, {'b': {'d'}, 'd': {'g'}, 'f': {'d', 'g'}, 'e': {'d'}, 'a': {'c', 'b'}, 'c': {'f', 'e'}}) 

を使用して、前のキーを上書き:dictのクラスをハッシュ可能なので、なぜすべてのコーディング作業でデフォルトのdictを使用しないのですか?デフォルトのdictは柔軟性があるように見えます。 –

+0

@ProgrammingDonkeyデフォルトのdictは、いくつかのユースケースではより柔軟です。既定の値を持つ必要がないとき、またはその特定のキーを持たないときにエラーを投げるときはいつでも、デフォルトのdictを使うことはできません。したがって、dictにデフォルトのdictよりも顕著なものがあるという強い理由があります。 –

関連する問題