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

Har*_*med 1 dictionary tuples list python-3.x

我有一个像这样的列表字典:

l = [{'d':1},{'d':2}]
Run Code Online (Sandbox Code Playgroud)

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

t = (1,2)
Run Code Online (Sandbox Code Playgroud)

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

Dar*_*one 6

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

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

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

tuple(item for sublist in l for item in sublist.values())
Run Code Online (Sandbox Code Playgroud)

使用reduce(这不会有两个以上的字典)(每个循环 2.06 微秒):

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

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

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

如果您迫切需要一行(每个循环 2.56 微秒):

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

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

from itertools import chain
tuple(chain(*map(lambda x: tuple(x.values()), l))))
Run Code Online (Sandbox Code Playgroud)