以字典方式从字典中解压缩嵌套列表值

时间:2018-05-16 19:53:19

标签: python list dictionary

这个问题here几乎到了我想要的地方。但是,我的字典在每个键的列表中都有一个列表,例如:

test = {1092268: [[81, 90], [78, 90]], 
        524292: [[80, 80], [65, 78]], 
        892456: [[88, 81], [81, 88]]}

当每个键中只有一个列表时,Works的建议是:

xs, ys = zip(*test.values())

如何从多个列表中解压缩(仍为xs和ys)?

例如,我期望的结果是:

xs = [81, 78, 80, 65, 88, 81]
ys = [90, 90, 80, 78, 81, 88]

2 个答案:

答案 0 :(得分:4)

没有太大的变化,只是提前弄平你的价值观。

public url: any; constructor(private sanitizer: DomSanitizer) { this.url = './uploads/{file.filename}}'; sanitizer.bypassSecurityTrustResoureUrl(this.url); } <object data="url" type="application/pdf"></object>

itertools.chain

当然,这会返回元组。如果您想要列表,我建议您添加from itertools import chain xs, ys = zip(*chain.from_iterable(test.values())) 电话 -

map

xs, ys = map(list, zip(*chain.from_iterable(test.values())))

理解为基础的

这是替代的,将嵌套嵌套循环转换为单行(即嵌套列表理解) -

print(xs)
[81, 78, 80, 65, 88, 81]

print(ys)
[90, 90, 80, 78, 81, 88]

xs, ys = map(list, zip(*[j for i in test.values() for j in i]))

但是,我建议使用print(xs) [81, 78, 80, 65, 88, 81] print(ys) [90, 90, 80, 78, 81, 88] ,因为它已被证明优于嵌套列表推导,全面地(......哈)。

答案 1 :(得分:2)

另一种方法是通过将 lambda 表达式作为第一个reduce传递来使用argument方法。

from functools import reduce
xs, ys = zip(*reduce(lambda x, y : x + y, test.values()))

执行reduce版本的更快捷方式可能是使用concat运算符。

xs, ys = zip(*reduce(operator.concat, test.values()))