Python 不能使用三元运算符在列表理解中使用解包

标签 python list tuples list-comprehension ternary-operator

假设我有一本字典

kwargs = {'key1': 1, 
          'key2': 2,
          'key3list': [1,2,3,4]}

其中任何键的值之一可以是整数列表,而其他键可以是任何对象,在本例中为整数。我想在一行(或最多几行)中,将键的所有值放入一个元组中,解压缩所有可能的列表。请注意,根据字典 kwargs 的构造方式,具有列表的键将具有以“list”结尾的键。

我想到了以下内容:

a = tuple(
[kwargs[key] if not key.endswith('list') else *kwargs[key] for key in kwargs.keys()]
)

但是我得到的错误是我无法在此处解压 *kwargs[key]..

我该如何解决这个问题?

最佳答案

如果您不必使用列表理解,可以使用生成器:

def flat(l):
    for k, v in l.items():
        if type(v) == list:
            for x in v:  
                yield x
        else:
            yield v

kwargs = {'key1': 1,
          'key2': 2,
          'key3list': [1,2,3,4]}

print(tuple(flat(kwargs)))

输出:

(1, 2, 1, 2, 3, 4)

请注意,dict 没有顺序,因此生成的元组可以根据 items() 返回字典项的顺序进行更改。

关于Python 不能使用三元运算符在列表理解中使用解包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50151504/

相关文章:

python - 将python flask web项目移动到github时如何隐藏数据库连接url?

python - 从数据框中删除反向重复项

python - 预分配一个无列表

python - 循环遍历并行列表删除匹配项,直到不再存在匹配项

python - 我可以使用对象(类的实例)作为 Python 中的字典键吗?

python - Scrapy 请求堆栈溢出

python - Python 中的 prophet 包和 fbprophet 有什么区别?

list - 检查列表列表是否有两个或多个相同的元素

tuples - Julia 编程 - 从集合中的索引创建元组

python - 为什么这段代码不起作用?如何正确将元组列表转换为字典