2016-03-29 19 views
0
man 
    cat 
    dog 
apple 
    sun 
    friend 

私はPythonの辞書を作成する必要が上記の形式のテキストファイルがあります。 {「男」: '猫、犬、リンゴ:「日」、「友人」}言葉をりんごにはスペースがありません。他のスペースはすべてスペースが2つあります。したがって、これらの2つはキーでなければなりません。 = "/home/yan/lem.txt"メイクPythonの辞書

class myDict(dict): 

    def __init__(self): 
     self = dict() 

    def add(self, key, value): 
     self[key] = value 

lema = myDict() 

with open(input_file, encoding='utf8', errors='ignore') as f: 
    for line in f: 
     if not line.startswith(" "): 
      lema.add(line.split(), [i for i in f if i.startswith(" ")]) 
print(lema) 

INPUT_FILEは、コードの上にしようとしていたが、それは私が期待していたものではない与えます。

+2

ようこそ。あなたの投稿のコードを書式化してください。本文コードは4つのスペースでフォーマットし、インラインコードはバッククォートでフォーマットする必要があります。 –

+0

は1行おきに空白ですか? –

+0

いいえ空白ではありません – Yan

答えて

1
  1. クラス機能add() dict.setdefault(key、list())。append(value)を使用すると、既存のキーに新しい値が追加されます。あなたはprint(lema)

$猫test.py

input_file = "lem.txt" 
    class myDict(dict): 

     def __init__(self): 
      self.mydict = dict() 

     def add(self, key, value): 
      self.mydict.setdefault(key, list()).append(value) 

     def __str__(self): 
      tmp = list() 
      for key, value in self.mydict.items(): 
       tmp.append("{0}:{1}".format(key, value)) 
      return "\n".join(tmp) 

    lema = myDict() 

    with open(input_file) as f: 
     for line in f: 
      if not line.strip(): 
       '''skips blank line''' 
       continue 
      elif not line.startswith(" "): 
       key = line.strip() 
      elif line.startswith(" "): 
       value = line.strip() 
       lema.add(key,value) 

    print(lema) 

The output is: 

    $python test.py 
    apple:['sun', 'friend'] 
    man:['cat', 'dog'] 
+0

男性 リンゴ 太陽 友人それは完璧に動作します!しかし、スペースのない単語の後に単語がない場合はどうですか? – Yan

1

これはあなたが必要なものを取得します:あなたはpythonでキーワードに予約されていないが、あなたのインスタンス変数を参照するために使用され、辞書の名前としてselfを使用することはできません

d = {} 
k = '' 
with open('lem.txt') as f: 
    for ln in f.readlines(): 
     if ln.startswith(' '): 
      d.setdefault(k, []).append(ln.strip()) 
     else: 
      k = ln.strip() 

print d 
1

あなたは一つの大きな文字列、sにファイルを読ま可能性が起動したときに、あなたの予想文字列の形式を表示

  • オーバーライド__str__方法、および次のようにしてください:

    s = """man 
        cat 
        dog 
    apple 
        sun 
        friend""" 
    
    d = {} 
    
    for line in s.replace("\n ",',').split('\n'): 
        words = line.split(',') 
        d[words[0]] = words[1:] 
    
    >>> d 
    {'man': ['cat', 'dog'], 'apple': ['sun', 'friend']} 
    

    ここで何が起こっているのかを感じるには:

    >>> s.replace("\n ",',') 
    'man,cat,dog\napple,sun,friend'