Python 如何使用lambda/maps从dict获取列表?
我有一份口述, 在这里,我管理程序及其不同版本的列表Python 如何使用lambda/maps从dict获取列表?,python,python-3.x,python-2.7,list,list-comprehension,Python,Python 3.x,Python 2.7,List,List Comprehension,我有一份口述, 在这里,我管理程序及其不同版本的列表 data = { 'soft1':{ 'v1':{...}, 'v2':{...} }, 'soft2':{ 'v1':{...}, 'v2':{...} }, 'soft3':{ 'v1':{...} }, ... } 现在我需要一个列表,如下所示: list_=[ 'soft1 v1', 'soft1 v2', 'soft2 v1',
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()]
但是我想要一个更有效的方法和更通灵的方法
我尝试:
list_ = [map(lambda soft: map(lambda ver: [soft + " " + ver], data[soft].keys()), data.keys())]
但它产生了这个错误
TypeError:只能将str(而不是“映射”)连接到str
我感谢您的意见和更正您可以使用带有f字符串的列表理解(在Python 3.6+中提供): 对于Python的早期版本,可以使用
str.format
:
res = ['{0} {1}'.format(k, w) for k, v in data.items() for w in v]
这将更有效率,因为:
- 格式化字符串文字比其他字符串连接方法更有效
- 通过
提取键值对比分别迭代键和访问值更有效dict.items
- 带有非内置函数的
+map
比列表理解效率低lambda
str.format
:
res = ['{0} {1}'.format(k, w) for k, v in data.items() for w in v]
这将更有效率,因为:
- 格式化字符串文字比其他字符串连接方法更有效
- 通过
提取键值对比分别迭代键和访问值更有效dict.items
- 带有非内置函数的
+map
比列表理解效率低lambda