我有这个词,我管理一个程序列表及其不同的版本
data = {
'soft1':{
'v1':{...},
'v2':{...}
},
'soft2':{
'v1':{...},
'v2':{...}
},
'soft3':{
'v1':{...}
},
...
}
现在我需要一个列表:
list_=[
'soft1 v1',
'soft1 v2',
'soft2 v1',
'soft2 v2',
'soft3 v1'
]
列表理解
list_ = [soft + " " + ver for soft in data.keys() for ver in data[soft].keys()]
但我想要一种更有效的方法和更多的pythonic,
我尝试:
list_ = [map(lambda soft: map(lambda ver: [soft + " " + ver], data[soft].keys()), data.keys())]
但它会产生此错误
TypeError:只能将str(不是“map”)连接到str
我很欣赏意见和更正
您可以使用带有f-strings的列表推导(Python 3.6+中提供):
res = [f'{k} {w}' for k, v in data.items() for w in v]
['soft1 v1', 'soft1 v2', 'soft2 v1', 'soft2 v2', 'soft3 v1']
对于早期版本的Python,您可以使用str.format
:
res = ['{0} {1}'.format(k, w) for k, v in data.items() for w in v]
这将更有效:
dict.items
提取键值对比迭代键和单独访问值更有效。map
+ lambda
的效率低于列表推导。