我有这个字典, 我在其中管理程序列表及其不同版本
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: can only concatenate str (not "map") to str
我感谢意见和更正
请您参考如下方法:
您可以将列表推导式与 f 字符串一起使用(在 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的效率低于列表理解。
