如何转换这两个python元组并组合成一个?

时间:2014-02-28 00:50:33

标签: python python-2.7

我有2个元组。

Tuple1 = (('James', 129L, 37L, 'IndexName1'), ('Jane', 231L, 23L, 'IndexName2')
Tuple2 = ((1L, 'IndexName1'), (2L, 'IndexName2'), (2L, 'IndexName3') )

我想转换这两个元组并转换成一个看起来像这样的元组;

OutputTuple = (('James', 129L, 37L, 1L), ('Jane', 231L, 23L, 2L)

OutputTuple与Tuple1几乎相同。区别在于第4个元素(IndexNameX)被替换为可以在Tuple2中找到的数字。

如何在Python中完成?我使用的是Python 2.7

编辑:谢谢你的回答。他们工作但我仍有问题。实际的Tuple1看起来像这样;

Tuple1 = (('Jane', 231L, 23L, 'IndexName5'), ('James', 129L, 37L, 'IndexName1') )

有一个IndexName5在Tuple2中没有对应的匹配项。当我在提供的答案中运行代码时,会出现错误。如何忽略没有相应匹配的情况?

3 个答案:

答案 0 :(得分:4)

您应该从dict中提出Tuple2

Tuple2dict = {key: value for value, key in Tuple2}

然后在每个的第四个元素上使用该查找来创建OutputTuple

OutputTuple = tuple(x[:3] + (Tuple2dict.get(x[3], x[3]),) for x in Tuple1)

答案 1 :(得分:2)

我肯定会推荐另一种数据结构,正如sashkello建议的那样,但现在你可以做到:

for name, v1, v2, index_name in Tuple1:
    matching_index = None
    for val, label in Tuple2:
        if label == index_name:
            matching_index = val
    print(name, v1, v2, matching_index)

输出:

('James', 129L, 37L, 1L)
('Jane', 231L, 23L, 2L)

答案 2 :(得分:0)

虽然我同意这里的其他答案,但事实是dict是你应该在这种情况下使用的数据结构。这就是你需要的:

tupl = (('james', 129L, 37L, 'IndexName1'), ('jane', 231L, 23L, 'IndexName2'), ('y', 232L, 12L, 'IndexName5'))
for name, v1, v2, index_name in tupl:
    matching_index = 'none'
    for val, lable in tupl2:
        if lable == index_name:
            matching_index = val
            result.append((name, v1, v2, matching_index))
            result_tuple = tuple(result)

result_tuple(('james', 129L, 37L, 1L), ('jane', 231L, 23L, 2L), ('y', 232L, 12L, 'none'))