简单1行循环

时间:2014-01-21 11:05:56

标签: python

通常我使用列表推导来迭代和过滤数据(即dicts等),而不需要为循环写多行。

[x['a']["b"] for x in s["items"] if x["car"] == "ford"]

然而,这会返回一个列表,如:

[False]

我写的不是一个大问题

[x['a']["b"] for x in s["items"] if x["car"] == "ford"][0]

然而,有没有一种方法可以使用列表推导或其他方式来编写for循环,if条件使得我只返回一个字符串?

编辑:换句话说,如何将以下内容放在一行并返回一个字符串

for x in s["items"]:
    if x["car"] == "ford":
       print x['a']['b']

谢谢,

3 个答案:

答案 0 :(得分:3)

如果我理解正确,你想在第一场比赛时短路。使用next和生成器表达式:

>>> s = {'items': [{'a': {'b': 'potato'}, 'car': 'ford'}, {'a': {'b': 'spam'}, 'car': 'honda'}]}
>>> next(x['a']['b'] for x in s['items'] if x['car'] == "ford")
'potato'

答案 1 :(得分:1)

由于您没有显示dict s,我已经使用可能的数据对其进行了测试,并且工作正常:

>>> s = {'items': [{'a': {'b': 1}, 'car': 'ford'}, {'a': {'b': 1}, 'car': 'honda'}]}
>>> print [x['a']['b'] for x in s['items'] if x['car'] == "ford"]
[1]

答案 2 :(得分:0)

问题的语法中没有任何内容可以保证s中只有满足条件的值。 (I.E.,对于任意dict s,可能不止一个。)

您可能能够保证是这种情况,但这是代码的(这部分)的外部。

因此python无法自动执行该操作。