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方式来做到这一点,提前致谢。
这是一种方法,我会尝试让它更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)
现在使用map和itertools(每个循环 2.74 微秒):
from itertools import chain
tuple(chain(*map(lambda x: tuple(x.values()), l))))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3101 次 |
| 最近记录: |