遍历元组列表并仅解压缩第一个元素

时间:2019-06-14 09:50:18

标签: python list-comprehension iterable-unpacking

假设以下列表:foo = [(1, 2, 3, 4), (5, 6, 7, 8)]

有没有办法遍历列表并仅解压缩内部元组的前两个元素?

这是一种常见的模式:{a: b for a, b, _, _ in foo},但是如果修改foo(程序更改)并且元组现在包含5个元素而不是4个元素,则此操作会中断(列表理解将需要修改相应地)。我真的很喜欢为元素命名而不是调用{f[0]: f[1] for f in foo},因此理想情况下,将存在某种“吸收所有未解压缩的变量”,因此可以调用{a: b for a, b, absorb_rest in foo}。如果可能的话,元组中包含多少个元素(只要至少有2个元素)就没关系。

4 个答案:

答案 0 :(得分:3)

您可以使用extended iterable unpacking,在其中提取元组的前两个元素,而忽略其余元素。请注意,这仅适用于python3

{a:b for a, b, *c in foo}                                                                                                                                                             

答案 1 :(得分:3)

尝试一下:

dict_ = {a:b for a,b, *_ in foo}

输出

{1: 2, 5: 6}

如果以后程序将foo更改为[(1, 2, 3, 4,9,0), (5, 6, 7, 8, 11, 16)],则dict_仍然保留:{1: 2, 5: 6}

答案 2 :(得分:3)

您可以使用extended iterable unpacking,以这种方式保留可迭代对象的前两个值,而忽略其余的值:

{a: b for a, b, *_ in foo}
# {1: 2, 5: 6}

答案 3 :(得分:0)

使用lambda

foo = [(1, 2, 3, 4), (5, 6, 7, 8)]
output = list(map(lambda x:{x[0]:x[1]}, foo))
print(output)

输出

[{1: 2}, {5: 6}]