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

问题描述 投票:1回答:1

我有这个词,我管理一个程序列表及其不同的版本

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

我很欣赏意见和更正

python python-3.x python-2.7 list list-comprehension
1个回答
6
投票

您可以使用带有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的效率低于列表推导。
© www.soinside.com 2019 - 2024. All rights reserved.