在 Python 中搜索二维元组/列表

Koo*_*obz 5 python

我想搜索tuple of tuples特定字符串并返回父元组的索引。我似乎经常遇到这种搜索的变体。

最Pythonic的方法是什么?

IE:

derp = (('Cat','Pet'),('Dog','Pet'),('Spock','Vulcan'))
i = None
for index, item in enumerate(derp):
    if item[0] == 'Spock':
         i = index
         break
>>>print i
2
Run Code Online (Sandbox Code Playgroud)

我可以将其概括为一个小的实用函数,它接受一个可迭代的、一个索引(我0在示例中进行了硬编码)和一个搜索值。它确实有效,但我有这样的想法:可能有一个单行句;)

IE:

def pluck(iterable, key, value):
    for index, item in enumerate(iterable):
        if item[key] == value:
             return index
    return None
Run Code Online (Sandbox Code Playgroud)

Sid*_*ava 5

或者你可以这样做:

dict(derp)[<key_name>]
Run Code Online (Sandbox Code Playgroud)

例如。

dict(derp)['Cat']
Run Code Online (Sandbox Code Playgroud)

这会给你“宠物”

  • 这看起来比公认的答案优雅得多 - 有缺点吗? (2认同)

HS.*_*HS. 4

它确实有效,但我有这样的想法:可能有一个单行句;)

单行代码可能不是Python式的方法:)

你使用的方法看起来不错。

编辑

如果你想变得可爱:

return next( (i for i,(k,v) in enumerate(items) if k=='Spock'),None)
Run Code Online (Sandbox Code Playgroud)

nextNone接受一个生成器表达式,并在生成器耗尽后返回下一个值或第二个参数(在本例中)。