如何在Python中用map将含键值对的字符串列表转为字典列表?
解决用map转换键值对字符串为字典列表时的IndexError问题
嘿,我一眼就看出你代码里的问题啦!咱们来捋一捋:
你的错误根源在lambda表达式的逻辑上:
lambda x : dict((a[0], a[1]) for a in x.split('='))
拿其中一个元素'a=b'来说,x.split('=')会得到['a', 'b'],然后你循环这个列表里的每个a——也就是先取字符串'a',再取'b',接着试图访问a[0]和a[1]。但'a'只有1个字符,a[1]根本不存在,这不就触发IndexError了嘛!
那该怎么改呢?我们的目标是把每个'key=value'字符串直接转成单个字典,这里有几种简单好用的写法:
方法1:直接拆分后构造字典
这是最直观的写法,把每个字符串拆成键和值,然后直接塞进字典里:
s = "foo a=b c=d e=f" splitted = s.split() result = list(map(lambda x: {x.split('=')[0]: x.split('=')[1]}, splitted[1:])) print(result) # 输出:[{'a': 'b'}, {'c': 'd'}, {'e': 'f'}]
方法2:用dict()的特性简化
dict()可以接受一个包含键值对的可迭代对象,我们直接把拆分后的列表传给它就行,这样还能避免两次调用split():
result = list(map(lambda x: dict([x.split('=')]), splitted[1:])) print(result) # 同样得到目标结果
小提醒
别忘了在Python 3里,map()返回的是迭代器,必须用list()把它转换成列表才能看到完整的结果哦~
内容的提问来源于stack exchange,提问作者John Doe
相关产品推荐
相关产品推荐

