Adding elements of two different sized lists to dictionary with alternating keys?

37 views Asked by At

I am writing code which contains two lists. First list is a list of letters from A-Z. Second list is the list of numbers from 1-100.

The output should be the key value pair of letters and numbers. After getting the key value pair until 26th letter, the alphabet should start from the beginning again with the next consecutive number until 100.

The logic which I wrote is only giving me the result until 26 numbers:

import string

alphabet = list(string.ascii_lowercase)
number =list(range(1,101))

res = dict(zip(alphabet, number))
print(res)

But the output should be in the below format:

{
  'a': 1,
  'b': 2,
  'c': 3,
  'd': 4,
  'e': 5,
  'f': 6,
  'g': 7,
  'h': 8,
  'i': 9,
  'j': 10,
  'k': 11,
  'l': 12,
  'm': 13,
  'n': 14,
  'o': 15,
  'p': 16,
  'q': 17,
  'r': 18,
  's': 19,
  't': 20,
  'u': 21,
  'v': 22,
  'w': 23,
  'x': 24,
  'y': 25,
  'z': 26,
  'a': 27,
  'b': 28,
  'c': 29,
  'd': 30,
  ...
  't': 98, 
  'u': 99,
  'v': 100,
}

1

There are 1 answers

0
B Remmelzwaal On

The comments have already explained that keys in a dictionary are unique, so your desired result is not possible with it. You can instead opt for either one of these solutions:

  1. Creating a dictionary with the keys being the letters of the alphabet, and the value a list of indices:
import string

alphabet = list(string.ascii_lowercase)

res = {letter: list(range(i, 101, len(alphabet))) for i, letter in enumerate(alphabet, 1)}

print(res)

Which outputs {'a': [1, 27, 53, 79], 'b': [2, 28, 54, 80], ..., 'z': [26, 52, 78]}.

  1. Creating a dictionary where the keys are indices and the value is the corresponding letter:
import string

alphabet = list(string.ascii_lowercase)

res = {i: alphabet[(i-1) % len(alphabet)] for i in range(1, 101)}

print(res)

Which outputs {1: 'a', 2: 'b', ..., 100: 'v'}.

If these aren't useful, I would recommend looking into other data structures. The best approximation would be a list creating tuples of letters and numbers:

import string

alphabet = list(string.ascii_lowercase)

res = [(alphabet[(i-1) % len(alphabet)], i) for i in range(1, 101)]

print(res)

Which outputs [('a', 1), ('b', 2), ..., ('v', 100)].