【问题标题】:Python dict ambiguityPython dict 歧义
【发布时间】:2018-06-15 08:33:50
【问题描述】:

我想使用 Python 关键字 dict 来返回一个字典,其中每个单词都是给定句子的真值。 代码sn-p是:

return dict((word, True) for word in words)

现在,当两个代码返回相同的字典时,就会出现歧义:

1.

return dict((word, True) for word in words)

2.

return dict([(word, True) for word in words])

为什么第二个 sn-p 不返回一个包含单词列表的字典?

【问题讨论】:

标签: python python-3.x list loops dictionary


【解决方案1】:

这两个 sn-ps 本质上等同于:

return dict.fromkeys(words, True)

这是一个映射,其中键是 words 中的项目,值是 True。

dict 类还采用 (key, value) 对的可迭代对象,这是您在这两个 sn-ps 中创建的。

首先,它是一个生成器表达式,所以不是所有的项目都是一次创建的,而是在迭代时创建的。

第二种是列表压缩,所以一开始就创建了一个列表,然后所有的项目都被创建并放入一个列表中。

在任何一种情况下,dict 都会看到一个可迭代对象。

【讨论】:

  • 感谢您提及dict.fromkeys。您还可以提到它的运行速度比 OP 的版本快得多,尤其是在 words 很大的情况下,因为它以 C 速度循环。
  • 那么,如果 words 是一个非常长的字符串,包括大约 1000000+ 个独立的单词,那么第一种制作 dict 的方法,即使用生成器表达式会花费相对更多的时间来执行?跨度>
猜你喜欢
  • 1970-01-01
  • 2011-04-11
  • 2013-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-04
相关资源
最近更新 更多