Skip to main content
 首页 » 编程设计

python之如何使用 lambda/maps 从字典中获取列表

2025年05月04日23txw1958

我有这个字典, 我在其中管理程序列表及其不同版本

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 的效率低于列表理解。