字典推导式中双层for循环异常,如何生成预期有序键值对?
修正字典推导式以生成预期映射
原字典定义
recipe = { "butter chicken": "Value", "pepper chicken": "Value", "garlic chicken": "Value", "ginger chicken": "Value", }
原推导式问题
你使用的推导式:
{key : value for key in range(1, len(recipe)+1) for value in recipe}
输出结果为:
{1: 'ginger chicken', 2: 'ginger chicken', 3: 'ginger chicken', 4: 'ginger chicken'}
问题出在嵌套循环:外层每遍历一个数字key,内层会完整遍历一遍recipe的所有键,最终每个数字key都会被内层循环的最后一个值覆盖。
修正后的推导式
有两种简洁的实现方式:
方式一:使用enumerate(推荐)
利用enumerate直接获取从1开始的索引和对应的键名:
{i: dish for i, dish in enumerate(recipe, start=1)}
方式二:使用zip配对序列
将数字范围和recipe的键序列配对后构建字典:
{num: dish for num, dish in zip(range(1, len(recipe)+1), recipe)}
预期输出
两种方式都会得到目标结果:
{1: 'butter chicken', 2: 'pepper chicken', 3: 'garlic chicken', 4: 'ginger chicken'}
内容的提问来源于stack exchange,提问作者vaseemcholakkan
相关产品推荐
相关产品推荐

