我有这样的列表:
l = [{'d':1},{'d':2}]
我想要的输出是dict值的元组:
t = (1,2)
我试过循环 但有更好的解决方案吗?任何内置函数? 我想要最好的pythonic方式来做到这一点,提前谢谢。
答案 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)
现在使用map
和itertools
(每个循环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])