我有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中没有对应的匹配项。当我在提供的答案中运行代码时,会出现错误。如何忽略没有相应匹配的情况?
答案 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'))