0

辞書のキーをこの形式 '/ cat/' にする必要がありますが、複数のスラッシュを取得し続けます。これが私のコードです:

 # Defining the Digraph method #
 def digraphs(s):
      dictionary = {}
      count = 0;
      while count <= len(s):
          string = s[count:count + 2]
          count += 1
          dictionary[string] = s.count(string)
      for entry in dictionary:
          dictionary['/' + entry + '/'] = dictionary[entry]
          del dictionary[entry]
      print(dictionary)
 #--End of the Digraph Method---#

ここに私の出力があります:

私はこれをします:

digraphs('私の猫は帽子の中にいます')

{'///in///': 1, '/// t///': 1, '/// c///': 1, '//s //': 1, '/my/': 1, '/n /': 1, '/e /': 1, '/ h/': 1, '////ha////': 1, '//////': 21, '/is/': 1, '///ca///': 1, '/he/': 1, '//th//': 1, '/t/': 3, '//at//': 2, '/t /': 1, '////y ////': 1, '/// i///': 2}
4

2 に答える 2

3

Python では、通常、オブジェクトの変更中にオブジェクトを反復処理しないでください。辞書を変更する代わりに、新しい辞書を作成します。

new_dict = {}

for entry in dictionary:
    new_dict['/' + entry + '/'] = dictionary[entry]

return new_dict

またはよりコンパクトに (Python 2.7 以降):

return {'/' + key + '/': val for key, val in dictionary.items()}

さらに良いアプローチは、最初に元の辞書を作成することをスキップすることです。

# Defining the Digraph method #
def digraphs(s):
    dictionary = {}

    for count in range(len(s)):
        string = s[count:count + 2]
        dictionary['/' + string + '/'] = s.count(string)

    return dictionary
#--End of the Digraph Method---#
于 2012-08-30T02:54:27.057 に答える
2

ループするときに辞書にエントリを追加しているため、新しいエントリもループに含まれ、余分なスラッシュが再び追加されます。より良いアプローチは、必要な新しいキーを含む新しい辞書を作成することです。

newDict = dict(('/' + key + '/', val) for key, val in oldDict.iteritems())

@Blender が指摘しているように、Python 3 を使用している場合は、辞書内包表記も使用できます。

{'/'+key+'/': val for key, val in oldDict.items()}
于 2012-08-30T02:51:04.767 に答える