Сделать словарь с l oop in python - PullRequest
0 голосов
/ 19 июня 2020

Я хочу создать словарь на python с 40 парами ключ / значение. Их ключи должны быть a1, a2 ... a10, b1, b2 ... b10, c1, c2 ... c10, d1, d2 ... d10. У меня есть для l oop, который принимает две переменные и изменяет их, чтобы они менялись после каждого l oop. Он выполняет 40 циклов для создания 40 различных значений для каждой из двух переменных.

В словаре значение для ключа a1 должно быть значением x и y в первом l oop. Значение ключа a2 должно быть значением x и y во втором l oop. Это продолжается до ключа d10, который должен иметь значения x и y в 40-м l oop.

Как я могу это сделать? Я думаю, что могу использовать for l oop, но, поскольку мне сложно понять циклы for, я не знаю, что мне делать.

Вот мой код:

x = 200
y = 202

for i in range(40):
    if y != 202 + 9 * 84:
        y += 84
    else:
        x += 100
        y = y - 9 * 84

Мне нужен словарь, который выглядит так:

dictionary = {'a1':(200, 202), 'a2':(# the value of x and y after looping a second time, here it will be 200, 286)}

Ответы [ 3 ]

1 голос
/ 19 июня 2020
letters = "abcd"
dictionary = {}

x = 200
y = 202

for i in range(40):
    key = letters[int(i / 10)] + str(i % 10 + 1)
    dictionary[key] = x, y

    if y != 202 + 9 * 84:
        y += 84
    else:
        x += 100
        y = y - 9 * 84
0 голосов
/ 19 июня 2020

Следующее основано исключительно на том, что 40 итераций происходят из ad x 1-10, поэтому я избавился от вашего for-l oop.

x = 200
y = 202
your_dict = {}

for j in ["a","b","c","d"]:
    for k in range(1,11):
        key = j + str(k)
        your_dict[key] = (x,y)
        if y != 202 + 9 * 84:
            y += 84
        else:
            x += 100
            y = y - 9 * 84

Результат:

{'a1': (200, 202), 'a2': (200, 286), 'a3': (200, 370), 'a4': (200, 454), 'a5': (200, 538), 'a6': (200, 622), 'a7': (200, 706), 'a8': (200, 790), 'a9': (200, 874), 'a10': (200, 958), 'b1': (300, 202), 'b2': (300, 286), 'b3': (300, 370), 'b4': (300, 454), 'b5': (300, 538), 'b6': (300, 622), 'b7': (300, 706), 'b8': (300, 790), 'b9': (300, 874), 'b10': (300, 958), 'c1': (400, 202), 'c2': (400, 286), 'c3': (400, 370), 'c4': (400, 454), 'c5': (400, 538), 'c6': (400, 622), 'c7': (400, 706), 'c8': (400, 790), 'c9': (400, 874), 'c10': (400, 958), 'd1': (500, 202), 'd2': (500, 286), 'd3': (500, 370), 'd4': (500, 454), 'd5': (500, 538), 'd6': (500, 622), 'd7': (500, 706), 'd8': (500, 790), 'd9': (500, 874), 'd10': (500, 958)}
0 голосов
/ 19 июня 2020

Вот элегантное решение, которое отслеживает как букву, так и число и форматирует их в ключ с помощью fstring.

x = 200
y = 202

# Create the dict first
res = {}

# Assign the letter to begin with
key_letter = 'a'

for i in range(0, 40):
    if i != 0 and i % 10 == 0:
        # Increment the letter since 10th element reached
        key_letter = chr(ord(key_letter) + 1)
    # Format the letter with the number
    res[f'{key_letter}{i % 10 + 1}'] = (x, y)
    if y != 202 + 9 * 84:
        y += 84
    else:
        x += 100
        y = y - 9 * 84
print(res)

Вывод:

{'a1': (200, 202), 'a2': (200, 286), 'a3': (200, 370), 'a4': (200, 454), 'a5': (200, 538), 'a6': (200, 622), 'a7': (200, 706), 'a8': (200, 790), 'a9': (200, 874), 'a10': (200, 958), 'b1': (300, 202), 'b2': (300, 286), 'b3': (300, 370), 'b4': (300, 454), 'b5': (300, 538), 'b6': (300, 622), 'b7': (300, 706), 'b8': (300, 790), 'b9': (300, 874), 'b10': (300, 958), 'c1': (400, 202), 'c2': (400, 286), 'c3': (400, 370), 'c4': (400, 454), 'c5': (400, 538), 'c6': (400, 622), 'c7': (400, 706), 'c8': (400, 790), 'c9': (400, 874), 'c10': (400, 958), 'd1': (500, 202), 'd2': (500, 286), 'd3': (500, 370), 'd4': (500, 454), 'd5': (500, 538), 'd6': (500, 622), 'd7': (500, 706), 'd8': (500, 790), 'd9': (500, 874), 'd10': (500, 958)}

Таким образом, вы не нужно поддерживать отдельную строку, чтобы отслеживать все буквы.

...