-1

dict の char キーとリスト内の char の比較に関して問題があります。タスクは、テキストを読み、最初の文字をすべて数えることです。

文字のリストがあります:

bchars = ('i','g','h','n','h')

そして、アルファベットと頻度のデフォルトがゼロの辞書:

d = dict(dict())
  for i in range(97,123):
    d[i-97]={chr(i):0}

いいえ、次のように確認したい:

for i in range(len(bchars)):
  for j in range(len(d)):
    if(bchars[i] in d[j]):
      d[j][chr(i+97)] +=1
    else:
      d[j][chr(i+97)] +=0

したがって、リスト内の文字が特定の位置のキーである場合、 += 1 else += zero if/else ステートメントを使用して KeyError をバイパスできると考えました。

そのためのよりエレガントなソリューションはありますか?

4

3 に答える 3

1

特定の問題は、 であるかどうかを確認することですbchars[i]in d[j]、実際に使用するキーは ですchr(i+97)

chr(i+97)は のi番目の文字のインデックスですが、bcharsから始まる ASCII 文字にマップされ'a'ます。なぜこれを鍵として使いたいのですか?

私はあなたが本当にやりたいと思う:

for i in range(len(bchars)):
    for j in range(len(d)):
        if(bchars[i] in d[j]):
            d[j][bchars[i]] += 1
        else:
            d[j][bchars[i]] = 1

;では使用できないことに注意してください+=。キーがそこにあるかどうかを文字通りチェックelseして、ないと判断したことを覚えていますか?

しかし、もっと広く言えば、あなたのコードは意味がありません。コードが複雑すぎて、Python の辞書の真の力を利用していません。d次のようになります。

{0: {'a': 0}, 1: {'b': 0}, 2: {'c': 0}, ...}

文字を直接数えるための辞書マッピングを作成する方がはるかに賢明です。

{'a': 0, 'b': 0, 'c': 0, ...}

次に、次のように簡単に実行できます。

for char in bchars:
    if char in d:
        d[char] += 1

Python には、この種のことを行うためだけのクラスも付属しています。

于 2014-05-13T15:38:11.350 に答える