有人可以解释一下,帮助我理解这段代码的工作原理吗?特别是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()]
答案 0 :(得分: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
中出现的顺序。
答案 1 :(得分:0)
我认为你的意思是
freq = exe_Data
在这种情况下,myHeap将如下所示:
[ [0.124167, ['e', ""]],
[0.0969225, ['t', ""]],
[0.0820011, ['a', ""]],
[0.0768052, ['i', ""]]
]
请注意,此处的顺序是任意的,但我想清楚地写清楚,以便您可以看到最终结果中的内容。
基本上它只是更改字典键/值的顺序,并且出于某种原因将键放在子数组中。
答案 2 :(得分:0)
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, ""]])