这个问题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]
答案 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()))