私は次のコードで立ち往生しています:
nonsense = 'faxoyk'
R = {CHR : 'afokyx'.index(CHR) for CHR in nonsense}
print R
私はpythonが初めてで、キーと値がどのように設定されるかについて混乱しています。このプロセスに関する洞察は大歓迎です。
私は次のコードで立ち往生しています:
nonsense = 'faxoyk'
R = {CHR : 'afokyx'.index(CHR) for CHR in nonsense}
print R
私はpythonが初めてで、キーと値がどのように設定されるかについて混乱しています。このプロセスに関する洞察は大歓迎です。
辞書内包表記は、Python のリスト内包表記の後に追加された機能です: リスト内包
表記
nonsense
は文字列です。ただし、これはシーケンス オブジェクトであるため、次のように使用してループfor CHR in nonsense
することは、各文字をループすることを意味します。
print [CHR for CHR in nonsense]
#['f', 'a', 'x', 'o', 'y', 'k']
ループの値の部分は、次のようになります。
['afokyx'.index(CHR) for CHR in nonsense]
[1, 0, 5, 2, 4, 3]
各ループで辞書理解を実行するCHR
と、文字列の文字になります。キーをに設定し、そのキーの値を文字列リテラルCHR
のインデックスに設定するように求めていますCHR
"afokyx"
python2.7 より前 (dict 内包表記が導入される前) では、リスト内包表記では次のようになっていました。
print [(CHR, 'afokyx'.index(CHR)) for CHR in nonsense]
# [('f', 1), ('a', 0), ('x', 5), ('o', 2), ('y', 4), ('k', 3)]
R = dict((CHR, 'afokyx'.index(CHR)) for CHR in nonsense)
キーと値はどのようにディクショナリに設定されますか?
辞書があるとします:
d = {}
値をキーに設定するには、次のようにします。
d['key'] = 'value'
取得するため:
d['key']
次のように、初期化中にキーと値のパースを設定できます。
d = {'key':'value'}
しかし、あなたは辞書内包表記を扱っています。それは少し高度なことです:
R = {CHR : 'faxoyk'.index(CHR) for CHR in nonsense}
この行は次のように理解できます。
nonsense = 'faxoyk'
R = {}
for CHR in nonsense:
R[CHR] = 'faxoyk'.index(CHR)
print R
すべての文字列にはメソッドがありindex()
ます。
string.index()
この文字列内の特定の文字のインデックスを返します。たとえば、文字列「faxoyk」の文字「x」のインデックスは 2、文字「f」のインデックスは 0 などです。これは、Python の反復可能なオブジェクトのインデックス付けが 0 から始まるためです。