Skip to main content
 首页 » 编程设计

python /集/字典/初始化

2025年05月04日7shanyou

有人可以解释一下,帮助我理解这段代码是如何工作的吗?特别是 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 是使用 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 中的顺序。