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

2024-09-30 00:29:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个元组。你知道吗

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几乎相同。不同的是,第四个元素(IndexNameX)被Tuple2中的一个数字替换了。你知道吗

如何在Python中实现这一点?我使用的是python2.7

编辑:谢谢你的回答。他们工作,但我仍然有一个问题。实际的Tuple1如下所示

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

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


Tags: 答案元素编辑数字元组janejamestuple2
3条回答

虽然我同意这里的其他答案,但事实是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'))

你应该用Tuple2做一个dict

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

然后在每个元素的第四个元素上进行OutputTuple查找:

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

我肯定会推荐另一种数据结构,正如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)

相关问题 更多 >

    热门问题