1

辞書に存在するキーに変数をマージしようとしています。ルールは次のとおりです。

  1. キーが既に存在する場合は、値カウンターを 1 つ増やします。
  2. キーへの部分一致が存在する場合: 変数の長さがキーよりも小さいが、re.search が None でない場合、値カウンターを 1 つ増やします b. 変数の長さがキーよりも大きく、re.search が None でない場合、キーを変数に置き換え、カウンターを 1 つ増やします
  3. この後に変数が存在するが、まだ辞書に一致がない場合は、変数を辞書に追加します

1、2a、2b は達成できましたが、3 を追加する方法がわかりません。ヘルプや提案をいただければ幸いです。現在の形式のスクリプトは次のとおりです。 Dict に "turtle" も表示したいと思います。

Animals = ["phant", "eleph", "tiger", "turtle", "zebra", "ostrich"]
Dict = {"horse":1, "elephant":1, "iger":1, "ostrich":1}

for name in Animals:
     if name in Dict:
             Dict[name]=Dict[name]+1
     else:
             for key, val in Dict.items():
                     if len(name) < len(key):
                             m = re.search (name, key)
                             if m != None:
                                     print ("Found match!", name)
                                     Dict[key] = Dict[key] + 1
                                     break
                     elif len(name) > len(key):
                              m = re.search (key, name)
                              if m != None:
                                     print ("Found match!", name)
                                     Dict[name] = Dict.pop(key) + 1
                                     Dict[name] = Dict[name] + 1
                                     break
4

2 に答える 2

1

コードを見た後にケース #3 を説明する 1 つの方法は、「どちらのbreakステートメントも実行されなかった場合」です。このケースは、ループelseの後にステートメントを配置することで処理できます。forこのブロック内のコードは、forループが完了するまで実行された場合にのみ実行されます (つまり、breakループ内でステートメントが実行されていない場合)。

Animals = ["phant", "eleph", "tiger", "turtle", "zebra", "ostrich"]
Dict = {"horse":1, "elephant":1, "iger":1, "ostrich":1}

for name in Animals:
    if name in Dict:
        Dict[name]=Dict[name]+1
    else:
        for key, val in Dict.items():
            if len(name) < len(key):
                m = re.search (name, key)
                if m != None:
                    print ("Found match!", name)
                    Dict[key] = Dict[key] + 1
                    break
            elif len(name) > len(key):
                m = re.search (key, name)
                if m != None:
                    print ("Found match!", name)
                    Dict[name] = Dict.pop(key) + 1
                    Dict[name] = Dict[name] + 1
                    break
        else:                 # this line and the one below it are new
            Dict[name] = 1
于 2013-08-23T21:54:03.177 に答える
0
for name in Animals:
    if name in Dict:
        Dict[name]=Dict[name]+1
    else:
        found= False
        for key, val in Dict.items():
            if len(name) < len(key):
                m = re.search (name, key)
                if m != None:
                    print ("Found match!", name)
                    Dict[key] = Dict[key] + 1
                    found= True
                    break
            elif len(name) > len(key):
                m = re.search (key, name)
                if m != None:
                    print ("Found match!", name)
                    Dict[name] = Dict.pop(key) + 1
                    found= True
                    break
        if not found
            Dict[name] = 1

ただし、次のことをお勧めします。

for name in Animals:
    if name in Dict:
        Dict[name]=Dict[name]+1
    else:
        found= False
        for key, val in Dict.items():
            m = re.search (name, key)
            if m != None:
                print ("Found match!", name)
                if len(name) < len(key):
                    Dict[key] = Dict[key] + 1
                else
                    Dict[name] = Dict.pop(key) + 1
                found= True
                break
        if not found
            Dict[name] = 1
于 2013-08-23T21:53:34.243 に答える