簡體   English   中英

python /設置/字典/初始化

[英]python / sets / dictionary / initialization

有人可以幫我解釋一下這段代碼是如何工作的嗎? 特別是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()]

正如您所說, freq是對字典的引用。

myHeap是使用列表 myHeap構建的,因此它是一個列表。 列表理解的一般形式為:

[ expr for x in iterable ]

因此, myHeap將是一個列表,其中的每個元素都是一個列表,第一個元素是相應字典條目的值,第二個元素是另一個列表,其第一個元素是字典的對應鍵,而第二個元素是""

給定的代碼示例中沒有集合。

您可以看到這樣工作(我編輯了數字輸出以提高可讀性):

>>> [ 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中的myHeap

我想你是說

freq = exe_Data

在這種情況下,myHeap將如下所示:

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

請注意,這里的順序是任意的,但是我想寫得很清楚,這樣您就可以看到最終結果。

基本上,它只是更改鍵/字典值的順序,並且出於某種原因將鍵放在子數組中。

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()]

最后一部分使用列表理解來創建列表。 它創建一個包含兩件事的列表的列表,第一件事是上面創建和引用的字典中的鍵,第二件事是包含字典中的對應值和空字符串的列表。

編輯:在評論的答案,這相當於寫作:

myHeap = []
for key, val in freq.items():
    myHeap.append([key, [val, ""]])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM