有人可以解释一下,帮助我理解这段代码是如何工作的吗?特别是 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
中的顺序。
关于 python /集/字典/初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10166987/