遍历元组列表并仅解压缩第一个元素
Iterate over list of tuples and unpack first elements only
假定以下列表: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}
,所以理想情况下,会有某种 "absorb all not unpacked variable",所以可以调用 {a: b for a, b, absorb_rest in foo}
。如果可能的话,元组中包含多少个元素并不重要(只要至少有 2 个)。
您可以使用 extended iterable unpacking,其中提取元组的前两个元素,并忽略其余元素。请注意,这仅适用于 python3
{a:b for a, b, *c in foo}
试试这个:
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}
您可以使用 extended iterable unpacking,以这种方式保留 iterable 的前两个值并忽略其余值:
{a: b for a, b, *_ in foo}
# {1: 2, 5: 6}
使用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}]
假定以下列表: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}
,所以理想情况下,会有某种 "absorb all not unpacked variable",所以可以调用 {a: b for a, b, absorb_rest in foo}
。如果可能的话,元组中包含多少个元素并不重要(只要至少有 2 个)。
您可以使用 extended iterable unpacking,其中提取元组的前两个元素,并忽略其余元素。请注意,这仅适用于 python3
{a:b for a, b, *c in foo}
试试这个:
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}
您可以使用 extended iterable unpacking,以这种方式保留 iterable 的前两个值并忽略其余值:
{a: b for a, b, *_ in foo}
# {1: 2, 5: 6}
使用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}]