Python:匹配元组中的两个元素,返回第三个元素

时间:2013-06-18 16:53:02

标签: python tuples string-comparison

我有一组输入条件需要比较,并根据两个输入产生第三个值。 3元素元组的列表似乎是一个合理的选择。在哪里我可以使用一些帮助是建立一个紧凑的方法来处理它。我已经按照以下方式列出了我想要使用的结构:

input1(string)与第一个元素比较,input2(string)与第二个元素比较,如果匹配,则返回第3个元素

('1','a', string1)
('1','b', string2)
('1','c', string3)
('1','d', string3)
('2','a', invalid)
('2','b', invalid)
('2','c', string3)
('2','d', string3)

3 个答案:

答案 0 :(得分:6)

创建一个dict,dicts可以将元组作为键,并将第三个项目存储为它的值。

使用dict会为任何一对O(1)提供(input1,input2)查找。

dic = {('1','a'): string1, ('1','b'):string2, ('1','c'): string3....}

if (input1,input2) in dic:
   return dic[input1,input2]
else:
   #do something else

在这种情况下使用元组列表将采用O(N)方法,对于每个input1input2,您必须循环遍历整个元组列表(在最坏的情况下) )。

答案 1 :(得分:2)

可以使用带有2元组的dict作为键,并将其值作为字符串/其他,然后您可以保持外观仅包含有效值,并且如果您希望,则默认值为invalid ...(使用dict.get

因此,如果您有一个refs列表,则可以将它们转换为dict并执行查找:

refs = [
    ('1','a', 'string1'),
    ('1','b', 'string2'),
    ('1','c', 'string3'),
    ('1','d', 'string3'),
    ('2','a', 'invalid'),
    ('2','b', 'invalid'),
    ('2','c', 'string3'),
    ('2','d', 'string3')
]

lookup = {ref[:2]:ref[2] for ref in refs}

print lookup['1', 'd']
#string3
print lookup.get(('I do not', 'exist'), 'uh oh, in trouble now!')
# uh oh, in trouble now!

答案 2 :(得分:0)

def checkIfSame(t):
    if t[0] == t[1]:
        return t[2]

我很确定这对你有用。