2014-08-27 74 views
-1

使用,同時使列表理解我有這樣的循環:如何在循環

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 

我總是需要回到第一字典與價值觀的lenght什麼是高於0 ,但我想用列表解析,使之

+0

列表理解用於當你想檢索列表而不是字典 – 2014-08-27 12:26:21

+0

爲什麼?列表解析*創建*列表;它們不僅僅是一個「for」循環的替代形式。 – chepner 2014-08-27 13:13:05

回答

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', []]), 
]