Python-keep Dictionary order with OrderedDict & amp; список понимание [дубликат]

Это работает для меня.

jQuery("#form_name").validate().settings.ignore = "";
89
задан vaultah 25 March 2016 в 17:09
поделиться

3 ответа

Сначала вы создаете словарь , а затем передаете этот словарь в OrderedDict. Когда вы это сделаете, заказ уже не будет правильным. dict по своей сути не упорядочен.

Вместо этого переходите к последовательности наборов:

ship = [("NAME", "Albatross"),
        ("HP", 50),
        ("BLASTERS", 13),
        ("THRUSTERS", 18),
        ("PRICE", 250)]
ship = collections.OrderedDict(ship)

Что вы видите, когда вы печатаете OrderedDict, это представление , и это совершенно правильно. OrderedDict([('PRICE', 250), ('HP', 50), ('NAME', 'Albatross'), ('BLASTERS', 13), ('THRUSTERS', 18)]) просто показывает вам в воспроизводимом представлении то, что содержимое имеет OrderedDict.

160
ответ дан Martijn Pieters 15 August 2018 в 14:29
поделиться
  • 1
    Хорошо, поэтому OrderedDict будет СОЗДАТЬ словарь для меня? Кроме того, чтобы печатать без воспроизводимого представления, могу ли я просто напечатать переменную, в которой используется OrderedDict? т. е .: print ship ?? Благодаря :) – pythonpiboy 29 March 2013 в 23:45
  • 2
    @pythonpiboy: печать ship будет печатать значение, на которое оно ссылается, поэтому оно напечатает представление OrderedDict. – Martijn Pieters♦ 29 March 2013 в 23:49
  • 3
    Вопрос: Как вы описали, OrderedDict делает упорядоченный «список». Разве это не побеждает цель? Он создает только список элементов, а не словари с ключами и значениями ... – pythonpiboy 30 March 2013 в 00:34
  • 4
    Тип действует как оба; отображение, которое сохраняет порядок. Чтобы создать его с заказом, вам нужно указать ему в порядке . Так как стандартный dict не может этого сделать, вы даете ему список кортежей. После того, как OrderedDict создан создан , он является словарем. – Martijn Pieters♦ 30 March 2013 в 00:39
  • 5
    Похоже, что путаница заключается в том, что предполагается, что OrderedDict "применяется" заказ, а не просто сохранение заказа. Я, конечно же, предположил, что он сортирует входные данные при создании - или что функция items () вернет отсортированные элементы независимо от того, когда они были вставлены. Вместо этого он просто держит все заказы, которые вы предоставляете. – whiterook6 20 July 2016 в 17:29

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

from collections import OrderedDict

order_of_keys = ["key1", "key2", "key3", "key4", "key5"]
list_of_tuples = [(key, your_dict[key]) for key in order_of_keys]
your_dict = OrderedDict(list_of_tuples)
10
ответ дан Jan Rozycki 15 August 2018 в 14:29
поделиться

В большинстве случаев мы отправляемся на OrderedDict, когда нам нужен пользовательский заказ, а не общий, например ASC и т. д.

Вот предлагаемое решение:

import collections
ship = {"NAME": "Albatross",
         "HP":50,
         "BLASTERS":13,
         "THRUSTERS":18,
         "PRICE":250}

ship = collections.OrderedDict(ship)

print ship


new_dict = collections.OrderedDict()
new_dict["NAME"]=ship["NAME"]
new_dict["HP"]=ship["HP"]
new_dict["BLASTERS"]=ship["BLASTERS"]
new_dict["THRUSTERS"]=ship["THRUSTERS"]
new_dict["PRICE"]=ship["PRICE"]


print new_dict

Это будет be output:

OrderedDict([('PRICE', 250), ('HP', 50), ('NAME', 'Albatross'), ('BLASTERS', 13), ('THRUSTERS', 18)])
OrderedDict([('NAME', 'Albatross'), ('HP', 50), ('BLASTERS', 13), ('THRUSTERS', 18), ('PRICE', 250)])

Примечание. Новые отсортированные словари сохраняют порядок сортировки при удалении записей. Но когда новые ключи добавляются, ключи добавляются до конца и сортировка не поддерживается. [ официальный doc )

5
ответ дан SomeGuy 15 August 2018 в 14:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: