如何从字典生成键按对应值重复的列表?代码编写求助
解决字典键按对应值重复生成列表的问题
嘿,我来帮你理顺这个问题!你当前的内层循环逻辑错啦——你现在是遍历字典所有的值,但实际上每个键只需要对应它自己的那个值来重复就行。
修正你的循环写法
我们只需要对每个键,拿到它对应的重复次数,然后把键重复对应次数添加到列表里就行:
a_dict = {1: 1, 4: 2, 5: 3, 6: 4} a_list = [] for key in a_dict.keys(): # 获取当前键需要重复的次数 repeat_times = a_dict[key] # 把键重复repeat_times次,扩展到列表中 a_list.extend([key] * repeat_times)
运行这段代码后,a_list就会得到你想要的结果:[1, 4, 4, 5, 5, 5, 6, 6, 6, 6]
更Pythonic的列表推导式写法
如果想让代码更简洁,用列表推导式一行就能搞定,逻辑和上面的循环完全一致:
a_dict = {1: 1, 4: 2, 5: 3, 6: 4} a_list = [key for key, repeat_times in a_dict.items() for _ in range(repeat_times)]
这里我们直接遍历字典的键值对,对每个键按照对应的次数生成重复元素。
为啥你原来的内层循环不行?
你原来的内层循环for value in a_dict.values()会遍历字典里所有的值,比如当处理键1时,会依次拿到1,2,3,4四个值,这会导致每个键都被错误地重复多次,完全不符合你的需求。所以我们要做的是每个键只对应它自己的那个值,而不是所有值。
内容的提问来源于stack exchange,提问作者Chengming Gu
相关产品推荐
相关产品推荐

