繁体   English   中英

python /设置/字典/初始化

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM