Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 返回包含特定元素的元组的最干净方法?_Python_Tuples - Fatal编程技术网

Python 返回包含特定元素的元组的最干净方法?

Python 返回包含特定元素的元组的最干净方法?,python,tuples,Python,Tuples,在python中,如果我有一组元组,如下所示: ((1, 'foo'), (2, 'bar'), (3, 'baz')) 返回包含特定第一个元素的元组的第0个元素的最有效/干净/Python方式是什么。我假设它可以作为一个简单的单行程序来完成 换句话说,如何使用“bar”返回2 如果不清楚的话,这就是我正在寻找的笨重的等价物: for tup in ((1, 'foo'), (2, 'bar'), (3, 'baz')): if tup[1] == 'bar': tu

在python中,如果我有一组元组,如下所示:

((1, 'foo'), (2, 'bar'), (3, 'baz'))
返回包含特定第一个元素的元组的第0个元素的最有效/干净/Python方式是什么。我假设它可以作为一个简单的单行程序来完成

换句话说,如何使用“bar”返回2


如果不清楚的话,这就是我正在寻找的笨重的等价物:

for tup in ((1, 'foo'), (2, 'bar'), (3, 'baz')):
    if tup[1] == 'bar':
        tup[0]

如果需要所有这些值,请使用列表:

>>> lis = ((1, 'foo'), (2, 'bar'), (3, 'baz'))
>>> [x[0] for x in lis if x[1]=='bar' ]
[2]
如果只需要一个值:

>>> next((x[0] for x in lis if x[1]=='bar'), None)
2
如果要多次执行此操作,请将元组列表转换为dict:

>>> d = {v:k for k,v in ((1, 'foo'), (2, 'bar'), (3, 'baz'))}
>>> d['bar']
2
>>> d['foo']
1
这将是一种“功能性”的方法:

filter(lambda x: x[1]=='bar',((1, 'foo'), (2, 'bar'), (3, 'baz')))[0][0]
或者向elazar借钱,因为我非常喜欢它:

dict(map(lambda x: (x[1],x[0]),((1, 'foo'), (2, 'bar'), (3, 'baz'))))['bar']
或者确实像elazar所说的,但在一行中:

dict(map(reversed,((1, 'foo'), (2, 'bar'), (3, 'baz'))))['bar']
t = ((1, 'foo'), (2, 'bar'), (3, 'baz'))

try:
    value = [x[0] for x in t if x[1]=='bar'][0]
except IndexError:
    raise Exception('Does not exist')
>>> lis = ((1, 'foo'), (2, 'bar'), (3, 'baz'))
>>> dict(map(reversed, lis))['bar']
2