在列表中获取匹配元素的简洁方法

19 浏览
0 Comments

在列表中获取匹配元素的简洁方法

我有一个看起来像这样的列表:

[{'name': 'red', 'test':4},... {'name': 'reded', 'test':44}]`

我有一个名字(例如:reded),我想找到上述列表中以name设为reded的字典。有没有一种简洁的方法来实现这个目标?

我的尝试类似于:

x = [dict_elem for dict_elem in list_above if dict_elem['name']==reded]

然后我执行:

final_val = x[0]

如果名称匹配。这也可以使用for循环完成,但似乎有一个简单的一行代码可以实现。我有什么遗漏吗?

0
0 Comments

在给定内容中,出现了一个问题:如何从列表中获取匹配的元素。

问题的解决方法是使用生成器表达式(generator comprehension)和next函数,以及使用异常处理或条件语句来处理找不到匹配项的情况。

首先,可以使用生成器表达式来筛选出满足条件的字典元素。生成器表达式的语法类似于列表推导式,但使用圆括号而不是方括号。

然后,可以使用next函数来获取生成器中的第一个元素。next函数接受两个参数:一个可迭代对象和一个默认值。如果可迭代对象中有元素,则返回第一个元素;如果可迭代对象为空,则返回默认值。

为了处理找不到匹配项的情况,可以使用try-except语句或条件语句。

在try-except语句中,可以使用StopIteration异常来捕获生成器中没有更多元素的情况。如果找不到匹配项,可以打印出相应的提示信息。

在条件语句中,可以将next函数的返回值与None进行比较。如果返回值为None,则表示找不到匹配项,可以打印出相应的提示信息。

可以通过以下代码来解决问题:

try:
    x = next(dict_elem for dict_elem in list_above if dict_elem['name'] == reded)
except StopIteration:
    print "No match found"

或者

x = next((dict_elem for dict_elem in list_above if dict_elem['name'] == reded), None)
if not x:
    print "No match found"

这种方法是一种简洁的方式来从列表中获取匹配的元素。

0