Python 在lambda中拆分后如何添加条带?
在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
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
。注意,虽然与JavaMap
的名称类似,但不会生成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
不会生成Javamap
或Pythondict
意义上的“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'}