使用python如何根据作为内部列表元素的键找到列表列表中的元素?

时间:2011-04-13 17:08:08

标签: python

假设我有一个列表列表或元组列表,哪个可以更有效地解决我的问题。例如:

student_tuples = [
    ('john', 'A', 15),
    ('jane', 'B', 12),
    ('dave', 'B', 10),
]

任务是根据内部列表或元组的任何元素的键在主列表中查找元素。例如:

使用上面的列表:

find(student_tuples, 'A')

find(student_tuples, 15)

都会返回

('john', 'A', 15)

我正在寻找一种有效的方法。

4 个答案:

答案 0 :(得分:14)

我会使用filter()或列表理解。

def find_listcomp(students, value):
    return [student for student in students if student[1] == value or student[2] == value]

def find_filter(students, value):
    return filter(lambda s: s[1] == value or s[2] == value, students) 

答案 1 :(得分:4)

要查找第一个匹配项,您可以使用

def find(list_of_tuples, value):
    return next(x for x in list_of_tuples if value in x)

如果找不到匹配的记录,这将引发StopIteration。要提出更合适的例外,您可以使用

def find(list_of_tuples, value):
    try:
        return next(x for x in list_of_tuples if value in x)
    except StopIteration:
        raise ValueError("No matching record found")

答案 2 :(得分:4)

您可以使用python的列表推导来选择和过滤:

def find(tuples, term):
    return [tuple for tuple in tuples if term in tuple]

答案 3 :(得分:0)

此函数将返回包含搜索词的元组列表。你走了:

def find_in_tuples(tuples, term):
    matching_set = []
    for tuple in tuples:
        if term in tuple:
            matching_set.append(tuple)
    return matching_set

>>> find_in_tuples(student_tuples, 'A')
[('john', 'A', 15)]
>>> find_in_tuples(student_tuples, 'B')
[('jane', 'B', 12), ('dave', 'B', 10)]