Итерировать по одному индексу в python dict - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть словарь Python lines, который индексируется кортежами, такими как: ('mid', 'north'), ('south', 'mid') и ('south', 'north').

lines = {('mid', 'north'): None,
         ('south', 'mid'): None,
         ('south', 'north'): None,
        }

Я создаю переменную (l_key) для создания кортежей из ключей lines dict.

l_key = tuple(lines.keys())
i = 0

Затем я перебираю ключи словаря с помощью lines.keys():

for line in lines.keys():
    lines[line] = Line(l_key[i][0], l_key[i][1])
    i += 1

Вот проблема,так как я хочу первую строку первого ключа lines внутри class Line, мне нужно индексировать l_key с [i][0], и на первой итерации i=0 я получаю 'mid'.

Затем на второй итерации i=1, и я получаю 'south' из l_key[1][0].

Я хотел бы знать, есть ли способ удалить i=0 и i+=1 изfor-loop и создать как-то такой же эффект?

EG:

for line in lines.keys() and i in range(0, len(l_key):
    lines[line] = Line(l_key[i][0], l_key[i][1])

Если я сделаю вышеприведенную версию, она, вероятно, будет работать 3 раза для lines.keys() и 3 для range(0, len(l_key).Таким образом, 3x3 = 9 раз ... Мне нужно запустить цикл for lines.keys() и увеличивать значение i на каждой итерации.

выполнение ниже работает, но есть ли лучший способ?:

i = 0
for line in lines.keys():
    lines[line] = Line(l_key[i][0], l_key[i][1])
    i += 1

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Вам не нужно использовать lines.keys(), так как for цикл повторяется автоматически по ключам :

for line in lines:
    lines[line] = Line(line[0], line[1])

Как видите, это все - вы не делаетеДля ключей не нужен индекс (i).

0 голосов
/ 21 ноября 2018

Примерно так:

for i, line in enumerate(lines.keys()):
        lines[line] = Line(l_key[i][0], l_key[i][1])
...