[英]get keys and values from a Python dictionary as lists
从我在 Python 上运行的代码中,我得到了以下 output:
T1 = [{0: 0}, {15: 3}, {19: 1}, {20: 1}, {0: 0}]
我想分别从每个 object 中提取键和值。 对于 T1,我将因此拥有:
P1 = [0,15,19,20,0]
D1 = [0, 3, 1,1,0]
最好的编码方式是什么?
提前致谢,
听起来很适合chain.from_iterable
:
>>> from itertools import chain
>>> from operator import methodcaller
>>> T1 = [{0: 0}, {15: 3}, {19: 1}, {20: 1}, {0: 0}]
>>> list(chain.from_iterable(T1))
[0, 15, 19, 20, 0]
>>> list(chain.from_iterable(map(methodcaller('values'), T1)))
[0, 3, 1, 1, 0]
字典在迭代时产生它的键; chain.from_iterable
获取此类可迭代对象的列表,并按顺序生成它们的所有键。 要对值执行相同的操作,请在每个项目上调用values()
,为此我们在此处map
调用者(相当于 ( methodcaller
(i.values() for i in T1)
)。
这应该工作:
T1 = [{0: 0}, {15: 3}, {19: 1}, {20: 1}, {0: 0}]
P1 = [next(iter(dct)) for dct in T1]
D1 = [next(iter(dct.values())) for dct in T1]
您将迭代器的第一个元素 ( next
) 放在键上 ( iter(dct)
) 或将插入器放在值上 ( iter(dct.values()
)。
这不会创建任何不必要的列表。
或在一个 go 中(注意:这些返回tuples
不是lists
):
P1, D1 = zip(*(next(iter(dct.items())) for dct in T1))
或(使用deceze 的部分答案):
from itertools import chain
P1, D1 = zip(*chain.from_iterable(dct.items() for dct in T1))
In [148]: P1 = [list(i.keys())[0] for i in T1]
In [149]: D1 = [list(i.values())[0] for i in T1]
In [150]: P1
Out[150]: [0, 15, 19, 20, 0]
In [151]: D1
Out[151]: [0, 3, 1, 1, 0]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.