LINUX.ORG.RU

Можно ли стандартными питоновскими структурами описать вот это

 


0

2

Есть структура типа такой:

Обращение:
    Первое (да/нет)
    Второе (да/нет)
    Третье (да/нет)
Возраст:
    Младше 18
    Старше 18
Требования - Все должно быть в том порядке, который задал я. Только так. Первое - обращение, второе возраст. Подзначения тоже должны сохранять порядок.

Собственно, словарь отпадает. Хотя, можно создать словарь+список, в словаре буду хранится непосредственно данные, а в списках правильный порядок. Но блин, чет не нравистя мне это решение.

Как лучше представить такую структур?

Deleted

Как лучше представить такую структур?

Для начала описать «хотелку» более внятно.

Siado ★★★★★
()

Как лучше представить такую структур?

Лучше такую структуру не представлять. Особенно перед сном.

Правильно так:

foo = {treatment_num: int, age: int}


Неправильно так:
foo = {
 treatment: {
  first: bool,
  second: bool,
  third: bool},
 age: {
  less18: bool, 
  more18: bool}
}


Именование отбалды.

P.S. может тебе в 1C программисты податься, если так тянет на кириллице кодить.

MrClon ★★★★★
()
Последнее исправление: MrClon (всего исправлений: 1)

Понятия не имею о чём ты, но в XSD например можно и заданный порядок требовать, и чтобы элементы могли иметь значения из ограниченного набора.

Hater ★★
()
Ответ на: комментарий от MrClon

Ах да, тебе зачем-то нужно сохранить порядок. Тогда списки вместо словарей на втором уровне. Или тебе нужен и порядок и именованость элементов? Тогда в кащенку.

MrClon ★★★★★
()
Ответ на: комментарий от Siado

Для начала описать «хотелку» более внятно.

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

Deleted
()
Ответ на: комментарий от MrClon

Нужен и порядок, и именнованость :(

Deleted
()
Ответ на: комментарий от anonymous

OrderedDict, namedtuple

Спасибо за наводку, щас гляну.

Deleted
()

Требования - Все должно быть в том порядке, который задал я. Только так. Первое - обращение, второе возраст. Подзначения тоже должны сохранять порядок.

маленько не понял - а какая тебе разница, в каком порядке все хранится? правильный порядок при выводе организуется собственно самим выводом.

arkhnchul ★★★
()
Ответ на: комментарий от arkhnchul

Всем спасибо, OrderedDict то что нужно.

маленько не понял - а какая тебе разница, в каком порядке все хранится? правильный порядок при выводе организуется собственно самим выводом.

Зачем парится о порядке вывода, когда можно не парится? OrderedDict работает прям в точности как мне нужно.

Deleted
()
Ответ на: комментарий от MrClon

неадекватушка

Сам такой. Эта структура как нельзя удобнее подходит для решения задачи. Я ее использую. И ты говоришь, что я неадекват?

Deleted
()
Ответ на: комментарий от Deleted

Задачу ты ставишь какую-то неадекватную. Зачем тебе сохранять исходную последовательность в словаре? Лень писать print(foo['treatment'], foo['age']) вместо print(foo)? А если понадобится изменить формат представления полезешь менять структуру данных?

MrClon ★★★★★
()

Зачем тебе такая очерёдность? Первое, что приходит на ум: сериализация. Но ведь сериализовать можно что угодно и как душе угодно.

KennyMinigun ★★★★★
()

OrderedDict

Ты вообще модуль collections посмотри, пригодится для общего развития.

Virtuos86 ★★★★★
()
Ответ на: комментарий от MrClon

Вообще, упрощать код за счёт усложнения данных — Ъ. Хотя бы потому, что данные могут быть снаружи (например, можно читать json в OrderedDict). Тем более в питоне это делается достаточно легко.

print(foo['treatment'], foo['age'])

Вырвиглазно.

x3al ★★★★★
()
Ответ на: комментарий от MrClon

Лень писать print(foo['treatment'], foo['age']) вместо print(foo)

Порядок вывода можно определить в __str__() же.

vurdalak ★★★★★
()
Ответ на: комментарий от x3al

Вырвиглазно.

Да это я условно. Лень было моцк включать и питон вспоминать.
К тому-же ТСу скорее всего выводить данные надо как-то совсем подругому.

MrClon ★★★★★
()
Ответ на: Правильно так: от ya-betmen

Правильно так:
№ обращения
Возраст

Нет. Там все сложно. Лень объяснять.

Deleted
()
Ответ на: комментарий от anonymous

Нет, в уведомлениях нашел. Ордеддикт в свое время действительно нашелся по запросу (не поверишь) «python 3 ordered dict».

Mahmood
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.