使用字典列出comprehesion

时间:2015-05-12 20:01:13

标签: python list dictionary list-comprehension

我有这本词典:

 primes = {2: True, 3: True, 4: False, 5: True, 6: False, 7: True} 

我想创建一个只有True对的列表。它看起来像这样:

[2, 3, 5, 7]

所以我尝试这样做:

primelist = [x for x, y in primes if y]

但我收到错误:

TypeError: 'int' object is not iterable

我做错了什么?

3 个答案:

答案 0 :(得分:4)

你很亲密!您只需要在字典上调用.items() method 1

primelist = [x for x, y in primes.items() if y]

迭代Python中的字典只会产生其键,而不是某些人可能期望的键和值。要获取这些内容,请调用.items()以返回一个可重复的键/值对,然后可以将其解压缩到名称xy中。

1 请注意,这个答案与Python 3.x有关。在Python 2.x中,您应该调用.iteritems(),因为Python 2.x .items()方法将构建一个不必要的列表。

答案 1 :(得分:3)

>>> filter(primes.get, primes)
[2, 3, 5, 7]

(那是Python 2,对于Python 3,你需要在它周围拍一个list(...)。)

我现在对它进行了速度测试,数字高达一百万。平均100次运行:

Python 2.7.9:
0.0908 seconds for filter(primes.get, primes)
0.2372 seconds for [n for n, p in primes.items() if p]

Python 3.4.3:
0.1856 seconds for list(filter(primes.get, primes))
0.0953 seconds for [n for n, p in primes.items() if p]


参考文献:filter() list() items()

答案 2 :(得分:0)

如果itemskey

,您可以对value进行迭代,然后存储True
>>> [k for k,v in primes.items() if v]
[2, 3, 5, 7]