如何使用lambda/maps从dict获取列表?

2024-04-26 00:45:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个口述, 我在这里管理程序及其不同版本的列表

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: can only concatenate str (not "map") to str

我感谢您的意见和纠正


Tags: 方法inmap列表fordatakeyslist
1条回答
网友
1楼 · 发布于 2024-04-26 00:45:13

可以将列表理解与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提取键值对比分别迭代键和访问值更有效。你知道吗
  • ^带有非内置函数的{}+lambda比列表理解效率低。你知道吗

相关问题 更多 >