8

次のような 26 文字のアルファベットの辞書を作成しました。

aDict={
    "a": 1,
    "b": 2,
    "c": 3,
    "d": 4,
    etc...
}

私は自分のコードをより良くしようとしていますが、私の質問は、これらすべての数字を入力せずにこれを行うより短い方法はありますか?

4

5 に答える 5

17

string.ascii_lowercaseここで理解度を使用して口述することができます。

In [4]: from string import ascii_lowercase as al

Python 2.7 以降の場合:

In [5]: dic = {x:i for i, x in enumerate(al, 1)}

Python 2.6 以前の場合:

In [7]: dic = dict((y, x) for x, y in enumerate(al, 1))
于 2013-02-15T20:37:08.897 に答える
6
aDict = dict(zip('abcdefghijklmnopqrstuvwxyz', range(1, 27)))

または、アルファベットをハードコーディングする代わりに:

import string
aDict = dict(zip(string.ascii_lowercase, range(1, 27)))
于 2013-02-15T20:37:02.073 に答える
2

これを試してください。Python2.6以前で動作します。

from string import ascii_lowercase
d = {}
for i, c in enumerate(ascii_lowercase, 1):
    d[c] = i

Python 2.7以降を使用している場合は、辞書内包表記を使用できます。

d = {c : i for i, c in enumerate(ascii_lowercase, 1)}
于 2013-02-15T20:38:16.300 に答える
1

関数を使用して文字のアスキー値を見つけることができますord()。逆はchr()次のとおりです。

>>> ord('a')
97

次に、次のように ascii 値から辞書を作成できます。

for i in range(97, 97+26):
    x[chr(i)] = i - 96 
于 2013-02-15T20:41:44.703 に答える
1

Python 2.7 以降:

import string

letters = {k: v for v, k in enumerate(string.ascii_lowercase, 1)}

Python 2.6 以下:

import string

letters = dict((k, v) for v, k in enumerate(string.ascii_lowercase, 1))
于 2013-02-15T20:42:27.480 に答える