如何从比值列表长的键列表中生成字典
How to make a dict from a key list which is longer than the value list
我有一个我想制作的字典,它会很大,有 600 个键值对。键将是整数,值将来自 3 个字母(A、B 和 C)的列表。如果我生成一个键列表,我如何 'map' 键的适当值。
代码
my_list = list(range(1,11,1))
my_letters = ["A", "B", "C"]
my_dict = {}
for k in my_list:
for v in my_letters
# I know it isn't going to be nested for loops
期望输出
#my_dict = {"1" : "A", "2" : "B", "3" : "C", "4" : "A", ... "10" : "A"}
您可以使用 itertools.cycle
与 zip
一起循环遍历较短的列表和 range
对象,并使用 dict comprehensions 创建字典
my_dict = {x: z for x, z in zip(range(1, 11), itertools.cycle(["A", "B", "C"]))}
print(my_dict) # {1: 'A', 2: 'B', 3: 'C', 4: 'A', 5: 'B', 6: 'C', 7: 'A', 8: 'B', 9: 'C', 10: 'A'}
作为旁注,如果 range
为 1,则无需将 range
转换为 list
或在 step
中指定 step
。
在这里,您可以使用键除以字母列表长度的余数来访问my_letters中的相应值。
my_list = list(range(1,11,1))
my_letters = ["A", "B", "C"]
my_dict = {}
for k in my_list:
my_dict[k] = my_letters[k%len(my_letters)-1]
print(my_dict)
输出:
{1: 'A', 2: 'B', 3: 'C', 4: 'A', 5: 'B', 6: 'C', 7: 'A', 8: 'B', 9: 'C', 10: 'A'}
正如@DarryIG 所指出的,使用dict
理解:
my_letters = ["A", "B", "C"]
my_dict = {k:my_letters[k%len(my_letters)-1] for k in range(1, 11)}
我有一个我想制作的字典,它会很大,有 600 个键值对。键将是整数,值将来自 3 个字母(A、B 和 C)的列表。如果我生成一个键列表,我如何 'map' 键的适当值。
代码
my_list = list(range(1,11,1))
my_letters = ["A", "B", "C"]
my_dict = {}
for k in my_list:
for v in my_letters
# I know it isn't going to be nested for loops
期望输出
#my_dict = {"1" : "A", "2" : "B", "3" : "C", "4" : "A", ... "10" : "A"}
您可以使用 itertools.cycle
与 zip
一起循环遍历较短的列表和 range
对象,并使用 dict comprehensions 创建字典
my_dict = {x: z for x, z in zip(range(1, 11), itertools.cycle(["A", "B", "C"]))}
print(my_dict) # {1: 'A', 2: 'B', 3: 'C', 4: 'A', 5: 'B', 6: 'C', 7: 'A', 8: 'B', 9: 'C', 10: 'A'}
作为旁注,如果 range
为 1,则无需将 range
转换为 list
或在 step
中指定 step
。
在这里,您可以使用键除以字母列表长度的余数来访问my_letters中的相应值。
my_list = list(range(1,11,1))
my_letters = ["A", "B", "C"]
my_dict = {}
for k in my_list:
my_dict[k] = my_letters[k%len(my_letters)-1]
print(my_dict)
输出:
{1: 'A', 2: 'B', 3: 'C', 4: 'A', 5: 'B', 6: 'C', 7: 'A', 8: 'B', 9: 'C', 10: 'A'}
正如@DarryIG 所指出的,使用dict
理解:
my_letters = ["A", "B", "C"]
my_dict = {k:my_letters[k%len(my_letters)-1] for k in range(1, 11)}