2

このビットのコードがどのように機能するかを理解するのに役立つ人が説明できますか? 特に、myHeap 割り当てがどのように機能するか。freq 変数が辞書として割り当てられていることは知っています。しかし、私の myHeap はどうでしょうか? セットですか?

    exe_Data = {
      'e' : 0.124167,
      't' : 0.0969225,
      'a' : 0.0820011,
      'i' : 0.0768052,
     }

    freq = exe_Data)

    myHeap = [[pct, [symbol, ""]] for symbol, pct in freq.items()]
4

3 に答える 3

1

freqあなたが言ったように、辞書への参照です。

myHeapリスト内包表記を使用して構築されているため、リストです。リスト内包表記の一般的な形式は次のとおりです。

[ expr for x in iterable ]

リストmyHeapも同様です。各要素は、最初の要素が対応する辞書エントリの値であるリストであり、2 番目の要素は、最初の要素が辞書の対応するキーであり、2 番目の要素が である別のリストです""

指定されたコード サンプルにはセットがありません。

これが次のように機能していることがわかります (読みやすくするために数値出力を編集しました)。

>>> [ symbol for symbol, pct in freq.items() ]
['a', 'i', 'e', 't']
>>> from pprint import pprint  # Yay, pretty printing
>>> pprint([ [pct, symbol] for symbol, pct in freq.items() ])
[[0.0820011, 'a'],
 [0.0768052, 'i'],
 [0.1241670, 'e'],
 [0.0969225, 't']]
>>> pprint([ [pct, [symbol, ""]] for symbol, pct in freq.items() ])
[[0.0820011, ['a', '']],
 [0.0768052, ['i', '']],
 [0.1241670, ['e', '']],
 [0.0969225, ['t', '']]]

Python の辞書は要素の順序を保持しないため、freq要素が最終的にどの順序になるかは保証されないことに注意してくださいmyHeap

于 2012-04-15T23:16:55.403 に答える
0
exe_Data = {
  'e' : 0.124167,
  't' : 0.0969225,
  'a' : 0.0820011,
  'i' : 0.0768052,
 }

上記のコードは、「exe_Data」という辞書を作成します。これを行う別の方法は、組み込みコンストラクターdict()をキーワード引数とともに次のように使用することです。exe_Data = dict(e=0.12467, t=0.0969225, a=0.0820011, i=0.0768052)

freq = exe_Data)

上記のビットは読むべきだと思いますfreq=exe_Data。前のビットで作成された辞書への別の参照を作成します。

myHeap = [[pct, [symbol, ""]] for symbol, pct in freq.items()]

この最後の部分では、リスト内包表記を使用してリストを作成します。2つのリストのリストを作成します。1つ目は上記で作成および参照した辞書のキーで、2つ目は辞書の対応する値と空白の文字列を含むリストです。

編集: コメントに答えて、それは書くことと同等です:

myHeap = []
for key, val in freq.items():
    myHeap.append([key, [val, ""]])
于 2012-04-15T23:22:48.267 に答える
0

私はあなたが意味したと思います

freq = exe_Data

この場合、myHeap は次のようになります。

[ [0.124167, ['e', ""]],
  [0.0969225, ['t', ""]],
  [0.0820011, ['a', ""]],
  [0.0768052, ['i', ""]]
]

ここでの順序は任意であることに注意してください。ただし、最終結果で何が得られるかがわかるように、わかりやすく書きたかったのです。

基本的に、辞書のキー/値の順序を変更し、何らかの理由でキーをサブ配列に配置するだけです。

于 2012-04-15T23:17:57.570 に答える