如何使用列表中的三个元素搜索元组

时间:2016-11-01 20:10:48

标签: python python-2.7

我有一个列表如下

tlist=[(‘abc’,HYD,’user1’), (‘xyz’,’SNG’,’user2’), (‘pppp’,’US’,’user3’), (‘qq’,’HK’,’user4’)]

我想显示第一个元组字段的第二个字段元组。

Ex:
tlist(‘xyz’) 
SNG

有办法搞定吗?

2 个答案:

答案 0 :(得分:3)

元组没有像字典一样的哈希表查找,所以你需要按顺序遍历它,直到找到它为止:

def find_in_tuple(tlist, search_term):
    for x, y, z in tlist:
        if x == search_term:
            return y

print(find_in_tuple(tlist, 'xyz')) # prints 'SNG'

如果您计划多次执行此操作,您肯定希望转换为字典。我建议将元组的第一个元素作为键,然后将另外两个元素作为该键的值。您可以使用词典理解轻松完成此任务。

>>> tlist_dict = { k: (x, y) for k, x, y in tlist } # Python 3: { k: v for k, *v in tlist }
>>> tlist_dict
{'qq': ['HK', 'user4'], 'xyz': ['SNG', 'user2'], 'abc': ['HYD', 'user1'], 'pppp': ['US', 'user3']}

然后您可以按如下方式选择第二个元素:

>>> tlist_dict['xyz'][0]
'SNG'

答案 1 :(得分:2)

如果有多个元组以xyz作为第一项,请使用以下简单方法(使用修改示例):

tlist = [('abc','HYD','user1'), ('xyz','SNG','user2'), ('pppp','US','user3'), ('xyz','HK','user4')]
second_fields = [f[1] for f in tlist if f[0] == 'xyz']

print(second_fields)  # ['SNG', 'HK']