2012-04-15 91 views
2

有人可以解釋一下,幫助我理解這段代碼的工作原理嗎?特別是myHeap任務如何工作。我知道freq變量被分配爲字典。但是我的心呢?它是一個集合?python/sets/dictionary/initialization

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

'頻率= exe_Data)'? 'SyntaxError'。 – 2012-04-15 23:13:47

回答

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

上面的代碼創建一個名爲'exe_Data'的字典。另一種方式做,這是使用內置構造,​​字典()的關鍵字參數如下: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, ""]]) 
+0

什麼是緊湊書寫方式myHeap = [[pct,[symbol, 「]]]爲符號,pct在freq.items()] – delgeezee 2012-04-16 00:35:57

+0

@MarioD請參閱我的編輯以獲得更長的寫入創建myHeap的位的方法。 – Andbdrew 2012-04-16 01:35:24

1

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

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

[ 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中。

+0

什麼是不那麼緊湊的書寫方式 myHeap = [[pct,[symbol,「」]] for symbol,pct in freq.items()] – delgeezee 2012-04-16 00:30:28

0

我假設你的意思

freq = exe_Data 

在這種情況下,myHeap看起來就像這樣:

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

請注意,這裏的順序是任意的,但我想寫說白了,所以你可以看看你最終的結果。

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