【问题标题】:python / sets / dictionary / initializationpython/集合/字典/初始化
【发布时间】:2012-04-27 08:40:42
【问题描述】:

谁能解释一下,帮助我理解这段代码是如何工作的?特别是 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 = exe_Data)? SyntaxError.

标签: python dictionary set compound-assignment


【解决方案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 中。

【讨论】:

  • 什么是不那么紧凑的写法 myHeap = [[pct, [symbol, ""]] for symbol, pct in freq.items()]
【解决方案2】:
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, ""]])

【讨论】:

  • 什么是不那么紧凑的写法 myHeap = [[pct, [symbol, ""]] for symbol, pct in freq.items()]
  • @MarioD 请查看我的编辑,以更详细地编写创建 myHeap 的位。
【解决方案3】:

我猜你的意思是

freq = exe_Data

在这种情况下,myHeap 将如下所示:

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

请注意,这里的顺序是任意的,但我想把它写清楚,这样你就可以看到最终的结果。

基本上它只是改变了字典的键/值的顺序,并出于某种原因将键放入子数组中。

【讨论】:

    猜你喜欢
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-15
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多