Python字典转列表的列表:转换结果不符合预期的问题求助
解决字典转指定格式列表的问题
嘿,我来帮你搞定这个字典转列表的问题!先拆解下你之前遇到的两个小坑:
- 用
map(list, d.items())得到嵌套列表,是因为d.items()返回的是(键, 值列表)这样的元组,转成列表后自然是[键, 值列表]的结构,没把键和值列表的元素合并到同一层。 - 你写的循环代码问题出在:每次循环都重置
lst=[],相当于之前的结果全被清空了;而且内层循环遍历值列表的单个元素,只把[k,i]加进去,这肯定得不到完整的合并结果。
下面给你几种靠谱的实现方法:
方法一:列表推导式(最简洁)
这是Python处理这类转换最常用的方式,一行代码就能搞定:
d = {10:[2,"str1",4] , 20:[5,"str2",7] , 30:[8,"str3",10]} lst = [[k] + v for k, v in d.items()]
原理很简单:[k]把单个键转换成只有一个元素的列表,然后和值列表v做拼接,直接得到[键, 值1, 值2, ...]的结构。
方法二:普通循环(更直观)
如果觉得列表推导式不够好理解,用循环也可以,只要修正之前的错误:
d = {10:[2,"str1",4] , 20:[5,"str2",7] , 30:[8,"str3",10]} lst = [] # 先初始化空列表,别在循环里重置它 for k, v in d.items(): # 把键和值列表合并成新列表,再添加到lst中 combined_list = [k] + v lst.append(combined_list)
这里要注意:绝对不要在循环内部重新赋值lst=[],否则每次循环都会清空之前的结果;另外不需要内层循环遍历值列表的每个元素,直接把键和整个值列表拼接就好。
方法三:用map配合lambda(适合函数式编程场景)
如果你想用map来实现,需要加一个lambda函数处理每个键值对,把键和值列表合并:
d = {10:[2,"str1",4] , 20:[5,"str2",7] , 30:[8,"str3",10]} lst = list(map(lambda item: [item[0]] + item[1], d.items()))
这里lambda item接收d.items()返回的每个(键, 值列表)元组,item[0]是键,item[1]是值列表,拼接后返回新列表,最后用list()把map返回的迭代器转换成列表。
不管用哪种方法,最终得到的lst都是你想要的结果:
[[10, 2, 'str1', 4], [20, 5, 'str2', 7], [30, 8, 'str3', 10]]
内容的提问来源于stack exchange,提问作者Andy2
相关产品推荐
相关产品推荐

