Python 在lambda中拆分后如何添加条带?

Python 在lambda中拆分后如何添加条带?,python,lambda,Python,Lambda,在lambda内部拆分后,如何剥离键值 l = [" key1 : value1 ", " key2 : value2 ", " key3 "] d = {} d = dict(map(lambda s : s.split(':'), l)) print d # print d['key2'] should work 结果包含以下空格: [[' key1 ', ' value1 '], [' key2

在lambda内部拆分后,如何剥离键值

   l = ["   key1  :      value1  ", "   key2  :      value2 ", "  key3 "]
   d = {}
   d = dict(map(lambda s : s.split(':'), l))
   print d

   # print d['key2'] should work
结果包含以下空格:

[['   key1  ', '      value1  '], ['   key2  ', '      value2 '], ['  key3 ']]

可以在拆分后拆分每个图元:

map(lambda s: [p.strip() for p in s.split(':')], l)
演示

我在那里使用了列表理解而不是
map()
调用;这对眼睛比较容易

您也可以将整个内容设置为嵌套列表:

[[p.strip() for p in s.split(':')] for s in l]
现在,如果要生成字典,必须过滤掉任何不是键值对的条目:

dict((p.strip() for p in s.split(':')) for s in l if ':' in s)

似乎您想从该列表中创建一个
dict
。注意,虽然与Java
Map
的名称类似,但不会生成
dict
。相反,您可以将
映射
或列表理解的结果输入到内置函数中。但是,请注意,
key3
没有值,因此您可能需要先过滤元素

>>> l = ["   key1  :      value1  ", "   key2  :      value2 ", "  key3 "]
>>> pairs = [[p.strip() for p in s.split(':')] for s in l]
>>> dict(p for p in pairs if len(p) == 2)
{'key2': 'value2', 'key1': 'value1'}
或使用:

您还可以使用dict理解,并可选地为缺少的值提供默认值

>>> {head: tail or "default" for head, _, tail in triplets}
{'key3': 'default', 'key2': 'value2', 'key1': 'value1'}

split
ting之前不能调用
strip
吗?为什么要将
d
初始化为
{}
?您是否知道
map
不会生成Java
map
或Python
dict
意义上的“map”?如果您想要
dict
,可以将结果传递给
dict
函数,即
dict(map(…)
或dict([…])
,但请注意,在split@Victor:但是您的输入示例不会受到
周围空白的影响。你会得到你需要的输出。我喜欢第二个你使用p的地方,但我仍然得到错误:NameError:全局名称'split'没有定义Cool worked:d=map(lambda p:[p.strip()代表p.split(':')),l)为什么不使用完整列表comp<代码>[[p.strip()表示s中的p.split(':')]表示l中的s]
>>> triplets = [[p.strip() for p in s.partition(":")] for s in l]
>>> dict((p[0], p[2]) for p in triplets)
{'key3': '', 'key2': 'value2', 'key1': 'value1'}
>>> {head: tail or "default" for head, _, tail in triplets}
{'key3': 'default', 'key2': 'value2', 'key1': 'value1'}