Создание нового списка из словаря, отсортированного по его значениям - PullRequest
0 голосов
/ 29 мая 2018

РЕДАКТИРОВАТЬ:

Как кто-то упоминал в качестве комментария, словари не будут иметь порядок, поэтому вопрос не имеет смысла в этом случае.

Вместо этого мне нужно установитьпорядок элементов одного списка на основе значений индекса, хранящихся в другом списке.

Например,

a = [апельсин, яблоко, персик, арбуз, камедь]

b = [3,4,1,2,0]

В этом случае я хочу взять значения, хранящиеся в каждом индексе в списке b, а затем переместить соответствующий индекс в списке aк новому индексу, основанному на этом значении из списка b.

Итак, с приведенным выше примером, если переупорядочить, результат будет:

a = [gum, peach, watermelon, orange, apple]

Поскольку первый элемент в списке b равен «3», мне нужно переместить соответствующее первое значение в списке a (в данном случае «апельсины») в указанную позицию индексасписок, поэтому он перемещается в позицию 3. Поскольку «0» является последним элементом списка «b», он соответствует последнему элементу в списке «a» (в данном случае'gum'), поэтому последний элемент списка 'a' должен быть перемещен в позицию индекса 0, как указано выше.

Мы можем предположить, что список b будет иметь ту же длину элементов, что и список a, и чтоЗначения индекса будут находиться только в допустимом диапазоне (например, от 0 до 4, если у нас есть 5 элементов), поэтому, хотя решение, которое помогает решить эту проблему, было бы интересно, в данном случае оно не требуется.

У меня есть словарь, скажем:

a = {0:3, 1:2, 2:1,3:0}

Я хочу создать список, который помещает ключи словаря в положение, указанное в значении словаря, вдругими словами, результат должен быть в этом случае:

b = [3, 2, 1, 0]

Или, если у вас есть:

a = {0: 1, 1: 0, 2: 4, 3: 3, 4: 2}

b, должен быть:

b = [1, 0, 4, 3, 2]

Я читал о прохождениифункция для метода списка сортировки, но я не совсем уверен, что это должно быть.

Ответы [ 3 ]

0 голосов
/ 29 мая 2018

Вы можете получить список, используя понимание списка , если индексы смежные.

Пожалуйста, прокомментируйте, если вы не удовлетворены ответом или вам нужна дополнительная функциональность.

Примечание: Не забудьте увидеть примеры 3.1 и 3.2, поскольку они фокусируются на основной части проблемы.

Попробуйте 2 приведенных ниже примера кода, основанные наввод, который вы указали в вопросе.

"Пример 1

a = {0:3, 1:2, 2:1,3:0}
b = [a[value] for value in sorted(a.values()) ]
print(b) # [3, 2, 1, 0]

" Пример 2

a= {0:1,1:0,2:4,3:3,4:2}
b = [a[value] for value in sorted(a.values()) ]
print(b) # [1, 0, 4, 3, 2]

Теперь давайте сосредоточимся на другой проблеме.

У нас есть 2 списка a и b .Мы должны переставить элементы списка a в соответствии с индексами, имеющимися в списке b .

"Пример 3.1 - список целых чисел

a = [10, 21, 52, 63, 74]
b = [3, 2, 4, 1, 0]
d = {} # d = dict()

for indx, value in enumerate(b):
    if(indx != value):
        if indx in d:
            d[value] = a[value]
            a[b[indx]] = d[indx]
            del d[indx]
        else:
            d[value] = a[value]
            a[value] = a[indx]

 print (a) # [74, 63, 21, 10, 52]

Пример 3.2 - список строк

a = ["orange", "apple", "peach", "watermelon", "gum"]
b = [3, 4, 1, 2, 0]
d = dict() # d = {}

for indx, value in enumerate(b):
    if(indx != value):
        if indx in d:
            d[value] = a[value]
            a[b[indx]] = d[indx]
            del d[indx]
        else:
            d[value] = a[value]
            a[value] = a[indx]

print (a) # ['gum', 'peach', 'watermelon', 'orange', 'apple']
0 голосов
/ 29 мая 2018

Создайте пустой список с максимальным значением, чтобы он не выдавал ошибку индекса:

a = {0: 1, 1: 0, 2: 4, 3: 3, 4: 2}

values=[0]*(max(a.values())+1)

for i in a:
    values[a[i]]=i

вывод:

[1, 0, 4, 3, 2]
0 голосов
/ 29 мая 2018

Надежный способ сделать это с использованием списка-списка:

res = [d.get(i, 0) for i in range(max(d) + 1)]

, который устанавливает значения списка отсутствующих индексов \ ключей равными 0.


Примеры :

>> d = {0:1, 1:0, 2:4, 3:3, 4:2}
>> res = [d.get(i, 0) for i in range(max(d) + 1)]
>> res
[1, 0, 4, 3, 2]

>> d = {0:1, 4:2}  # index location 1, 2 & 3 is missing!
>> res = [d.get(i, 0) for i in range(max(d) + 1)]
>> res
[1, 0, 0, 0, 2]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...