从混合列表中解包元组值

时间:2019-03-19 16:02:04

标签: python

想象一下我有以下列表

lst = [("key1", "2"), ("key3", "4"), "somestring", 12345]

我想从中构建一个dict(就是使用dictcomp):

d = {key: value 
     for item in lst 
     for key, value in [item]
     if isinstance(item, tuple)}

这将以ValueError结束(要解压缩的值太多)。
if子句何时进行评估(当然,这对于解包至关重要)?
注意:我知道我之前可以使用filter/lambda,但想知道是否可以一步完成。

2 个答案:

答案 0 :(得分:4)

我认为这就是您想要的:

>>> lst = [("key1", "2"), ("key3", "4"), "somestring", 12345]
>>> dict([i for i in lst if type(i) is tuple])
{'key1': '2', 'key3': '4'}

答案 1 :(得分:1)

您还可以使用以下dictcomp:

{i[0]: i[1] for i in lst if isinstance(i, tuple)}
# {'key1': '2', 'key3': '4'}
相关问题