如何实现字母列表循环与1-100数字配对生成完整字典?
问题与解决方案
问题
我需要用Python实现:将1-100的数字依次与a-z循环配对,生成键值对。但当前代码只能生成前26个数字的配对,代码如下:
import string alphabet = list(string.ascii_lowercase) number = list(range(1,101)) res = dict(zip(alphabet, number)) print(res)
我想要的配对逻辑是:a对应1,b对应2…z对应26,接着a对应27,直到v对应100(示意的字典结构中重复键仅作逻辑展示,实际字典键具有唯一性)。
问题原因
zip()函数会以传入的最短迭代器长度为准,字母表只有26个元素,因此只完成了前26个数字的配对。- Python字典的键是唯一的,如果直接生成字典,后续重复的字母键会覆盖之前的值,无法同时保留
'a':1和'a':27这类重复键的条目。
解决方案
方法1:用itertools.cycle循环字母表
itertools.cycle可以无限循环迭代字母表,配合zip就能覆盖所有数字。如果需要保留所有配对关系,生成键值对列表;如果只需要每个字母对应最后一次配对的数字,转成字典即可:
import string from itertools import cycle alphabet = list(string.ascii_lowercase) numbers = list(range(1, 101)) # 生成所有配对的键值对列表(保留全部配对关系) all_pairs = list(zip(cycle(alphabet), numbers)) print(all_pairs) # 生成字典(每个字母保留最后一次配对的数字) final_dict = dict(all_pairs) print(final_dict)
方法2:手动计算字母索引
无需额外库,通过数字计算对应的字母位置:
import string alphabet = list(string.ascii_lowercase) numbers = list(range(1, 101)) final_dict = {} for num in numbers: # 计算对应字母的索引:(数字-1)取模26,适配从1开始的数字序列 char_index = (num - 1) % len(alphabet) final_dict[alphabet[char_index]] = num print(final_dict)
拓展:保留字母对应的所有数字
如果需要记录每个字母对应的全部数字(比如a对应1、27、53、79),可以用字典套列表的结构:
import string alphabet = list(string.ascii_lowercase) numbers = list(range(1, 101)) result = {char: [] for char in alphabet} for num in numbers: char_index = (num - 1) % len(alphabet) result[alphabet[char_index]].append(num) print(result)
内容的提问来源于stack exchange,提问作者Shashank
相关产品推荐
相关产品推荐

