如何在循环中使用列表理解

时间:2014-08-27 12:22:14

标签: python for-loop while-loop list-comprehension

我有这样的循环:

ex = [{u'white': []},
 {u'yellow': [u'9241.jpg', []]},
  {u'red': [u'241.jpg', []]},
   {u'blue': [u'59241.jpg', []]}]


for i in ex:
    while not len(i.values()[0]):
        break
    else:
        print i
        break

我总是需要返回第一个dict,其值为0,高于0 但我想用列表理解来实现它

1 个答案:

答案 0 :(得分:3)

列表理解会产生一个完整的列表,而你只想要一个项目

改为使用生成器表达式,并使next() function迭代到第一个值:

next((i for i in ex if i.values()[0]), None)

我已经给next()默认返回;如果没有匹配的字典,则返回None

演示:

>>> ex = [{u'white': []},
...  {u'yellow': [u'9241.jpg', []]},
...   {u'red': [u'241.jpg', []]},
...    {u'blue': [u'59241.jpg', []]}]
>>> next((i for i in ex if i.values()[0]), None)
{u'yellow': [u'9241.jpg', []]}

但是,您应该重新考虑您的数据结构。只有一个键值对的字典告诉我你想要一个不同的类型;元组或许:

ex = [
    (u'white', []),
    (u'yellow', [u'9241.jpg', []]),
    (u'red', [u'241.jpg', []]),
    (u'blue', [u'59241.jpg', []]),
]