如何将含list.extend的字典遍历循环改写为单行字典推导式?
字典推导式改写方案
你的需求是将以下遍历字典的for循环改写为单行字典推导式:
my_dict={'i':([3,4,5,6]), 'j':[10,20,30,40]} for key, value in my_dict.items(): zeros=[0]*2 zeros.extend(value) my_dict[key] = zeros
你尝试的两种写法都无法得到预期结果,问题出在方法的返回值和操作逻辑上:
- 第一种写法
{key:([0]*2).extend(value) for key, value in my_dict.items()}:extend()是原地修改列表的方法,它的返回值是None,所以最终字典的所有值都会变成None。 - 第二种写法
{key:value.insert(0, [0,0]) for key, value in my_dict.items()}:insert()同样是原地修改列表的方法,返回None;而且这里是把[0,0]作为单个元素插入到列表开头,最终会得到[[0,0], 3,4,5,6]这类不符合预期的结构。
正确的字典推导式应该使用列表拼接来生成新列表,这样能直接得到目标结构:
my_dict = {key: [0]*2 + value for key, value in my_dict.items()}
运行后就能得到你期望的输出:
{'i': [0, 0, 3, 4, 5, 6], 'j': [0, 0, 10, 20, 30, 40]}
内容的提问来源于stack exchange,提问作者montoisky
相关产品推荐
相关产品推荐

