如何在python 3.4.4中将dict值列表转换为元组?

时间:2017-05-17 07:06:45

标签: list python-3.x dictionary tuples

我有这样的列表:

l = [{'d':1},{'d':2}]

我想要的输出是dict值的元组:

t = (1,2)

我试过循环 但有更好的解决方案吗?任何内置函数? 我想要最好的pythonic方式来做到这一点,提前谢谢。

2 个答案:

答案 0 :(得分:4)

这是一种方法,我会尝试让它更加pythonic ...

l = [{'d':1},{'d':2},{'d':1},{'d':2}]
vals = []
for d in l:
    vals.extend(d.values())
print(tuple(vals))

作为列表理解(每循环1.08 usec):

tuple(item for sublist in l for item in sublist.values())

使用reduce(这不会超过两个dicts)(每个循环2.06 usec):

l = [{'d':1},{'d':2}]
from functools import reduce
reduce(lambda x,y: tuple(x.values()) + tuple(y.values()),l)

要处理两个以上的dicts,我们必须准备列表的第一个值,因此它已经是tuple(每个循环2.06 usec):

from functools import reduce
l[0] = tuple(l[0].values())
reduce(lambda x,y: x + tuple(y.values()) ,l)

如果你急需一行(每个循环2.56次使用):

from functools import reduce
reduce(lambda x,y: tuple(x.values() if isinstance(x, dict) else x) + tuple(y.values()),l)

现在使用mapitertools(每个循环2.74 usec):

from itertools import chain
tuple(chain(*map(lambda x: tuple(x.values()), l))))

答案 1 :(得分:0)

@Darkstarone提供了许多有用的方法,其中最快的,我认为大多数pythonic是具有列表理解的方法。我发现双重列表理解有些混乱,因此我想出了一个只涉及单一列表理解的解决方案(诚然,在其他地方还有更多的体积)。

tuple([list(a.values())[0] for a in l])