Я пытаюсь поменять местами элементы по индексу внутри одного Python dict, вот моя структура данных

{'A': [4, 7], 'B': [5, 1], 'C': [0, 5], 'D': [1, 3], 'E': [3, 0], 'F': [2, 6], 'G': [7, 2], 'H': [6, 4]}

Я хочу поменять местами, например, вот так:

 {'F': [2, 6], 'B': [5, 1], 'C': [0, 5], 'D': [1, 3], 'E': [3, 0], 'A': [4, 7], 'G': [7, 2], 'H': [6, 4]}
0
Fardin 19 Янв 2021 в 19:05

2 ответа

Лучший ответ

Вы не можете произвольно переупорядочить dict, не перестраивая его (набор целевых pop и повторных вставок может сделать это по частям, но это было бы абсурдно сложно с небольшой или нулевой выгодой). Если вы хотите поменять местами две пары key/value, лучше всего преобразовать такие пары в list, поменять местами индексы, а затем преобразовать обратно в dict, например:

population = {'A': [4, 7], 'B': [5, 1], 'C': [0, 5], 'D': [1, 3], 'E': [3, 0], 'F': [2, 6], 'G': [7, 2], 'H': [6, 4]}
population = list(population.items())
population[indexA], population[indexB] = population[indexB], population[indexA]
population = dict(population)

Это O(n) работа для ясности (выполняется один раз для преобразования в list, снова для преобразования обратно в dict); если вам действительно нужно делать это неоднократно, я бы посоветовал придерживаться list, вообще не конвертируясь в dict.

0
ShadowRanger 19 Янв 2021 в 16:14

Я бы сначала преобразовал диктант в список:

d = {'A': [4, 7], 'B': [5, 1], 'C': [0, 5], 'D': [1, 3], 'E': [3, 0], 'F': [2, 6], 'G': [7, 2], 'H': [6, 4]}
l = list(d.items())
l[i1], l[i2] = l[i2], l[i1]
d = dict(l)
0
Francisco Couzo 19 Янв 2021 в 16:13