【问题标题】:Python 2.6 dictionary builder notationPython 2.6 字典生成器表示法
【发布时间】:2016-05-07 04:06:57
【问题描述】:

我有 2 个列表 'a','b','c'1,2,3,我将它们压缩在一起以获得一个字典 {'a':1, 'b':2, 'c':3}。我在 Python 2.7 上成功完成了以下操作:

fields = ['a', 'b', 'c']
values = [1, 2, 3]
record = {key:value for key,value in zip(fields, values)}

但在 Python 2.6.6 上,它在第 3 行的 for 处给了我语法错误。

是不是 Python 2.6.6 不支持字典生成器表示法?

如果是这样,那么有效实现字典{'a':1, 'b':2, 'c':3} 的替代方法是什么?

【问题讨论】:

  • 这是 Python 2.7 中添加的字典理解

标签: python python-2.7 tuples python-2.6


【解决方案1】:

您正在尝试做的是 字典理解,这在您的 python 版本中不可用。

您可以从 (key,value) 元组生成您的字典:

>>> dict((key,value) for key,value in zip(fields,values))
{'a': 1, 'c': 3, 'b': 2}

编辑

@PeterWood 的精彩评论:

使用dict(zip(fields, values))。这更短更快。

In [15]: timeit dict((key,value) for key,value in zip(range(1000),range(1000)))
1000 loops, best of 3: 317 µs per loop
In [16]: timeit dict(zip(range(1000), range(1000)))
10000 loops, best of 3: 138 µs per loop

使用itertools.izip,您将获得另一个性能提升:

In [25]: timeit dict((key,value) for key,value in izip(range(1000),range(1000)))
1000 loops, best of 3: 286 µs per loop
In [24]: timeit dict(izip(range(1000), range(1000)))
10000 loops, best of 3: 78.6 µs per loop

【讨论】:

  • 为什么不dict(zip(fields, values))
  • 好吧,因为我没有看到。介意编辑吗?
  • 哪个效率更高?我将在 huge 数据 上使用它
  • 我用timeit 做了一些快速测试,dict(zip(fields, values)) 似乎要快一些(这是有道理的)。
  • @davneet 我不知道效率,也不会担心。另一种解决方案使用可能有效的生成器表达式。不过可以使用timeit查看。 zip 将是改用izip 来提高效率的地方。
猜你喜欢
  • 1970-01-01
  • 2020-01-18
  • 1970-01-01
  • 2014-05-17
  • 2023-03-15
  • 2011-10-06
  • 1970-01-01
  • 1970-01-01
  • 2020-01-28
相关资源
最近更新 更多