我有这样的循环:
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 但我想用列表理解来实现它
答案 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', []]),
]