[英]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.