如何比较这两个长度不等的元组并根据比较输出另一个元组?
我有一个包含元组的元组;
Tup1= ( ('AAA', 2), ('BBB', 3) )
我还有另一个元组;
Tup2 = ('AAA', 'BBB', 'CCC', 'DDD')
我想比较一下 Tup1
和 Tup2
。根据比较的结果,我想创建一个新的元组,里面也包含元组,格式像这样;
OutputTup = ( ('AAA', 2), ('BBB', 3), ('CCC', 0), ('DDD', 0) )
逻辑是这样的:先查看 Tup2
中的每一个元素,然后在 Tup1
中寻找匹配的元素。如果在 Tup1
中找到了匹配的元素(比如 'AAA'),就把它复制到输出元组中,格式是 ('AAA', 2)。如果没有找到匹配的元素(比如 'CCC'),那么就赋值为 0,并添加到输出元组中,格式是 ('CCC', 0)。
请问在 Python 2.7 中怎么实现这个呢?谢谢。
2 个回答
2
请稍微修改一下我的回答。我不知道怎么检查类型。如果有人知道,请随意编辑我的回答。
from itertools import izip,izip_longest
Tup1= ( ('AAA', 2), ('BBB', 3) )
Tup2 = ('AAA', 'BBB', 'CCC', 'DDD')
lis=[ i if type(i[0])==type(0) else i[0] for i in list(izip_longest(Tup1, Tup2 , fillvalue=0))]
#output [('AAA', 2), ('BBB', 3), (0, 'CCC'), (0, 'DDD')]
3
这个方法也能得到你想要的输出:
tup1 = ( ('AAA', 2), ('BBB', 3) )
tup2 = ('AAA', 'BBB', 'CCC', 'DDD')
dic = dict( tup1 )
for tri in tup2:
dic[tri] = dic.get(tri,0)
print tuple(dic.items())
#(('AAA', 2), ('BBB', 3), ('CCC', 0), ('DDD', 0))