通常我使用列表推导来迭代和过滤数据(即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']
谢谢,
答案 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无法自动执行该操作。