繁体   English   中英

从 Python 字典中获取键和值作为列表

[英]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))

使用List Comprehensions

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM