Python выборка одного кортежа, обратного из словаря - PullRequest
1 голос
/ 22 апреля 2020

Я не уверен насчет этого вопроса, но это меня беспокоит на короткое время.

У меня есть словарь для измерений в пикселях разных размеров бумаги для 4 отдельных ИЦП, как показано ниже

paperSizes = {
    "A0": {
        "72": {2384, 3370},
        "96": {3179, 4494},
        "150": {4967, 7022},
        "300": {9933, 14043}
    },
    "A1": {
        "72": {1684, 2384},
        "96": {2245, 3179},
        "150": {3508, 4967},
        "300": {7016, 9933}
    },
    "A2": {
        "72": {1191, 1684},
        "96": {1587, 2245},
        "150": {2480, 3508},
        "300": {4960, 7016}
    },
    "A3": {
        "72": {842, 1191},
        "96": {1123, 1587},
        "150": {1754, 2480},
        "300": {3508, 4960}
    },
    "A4": {
        "72": {595, 842},
        "96": {794, 1123},
        "150": {1240, 1754},
        "300": {2480, 3508}
    }
}

Теперь, только когда я пытаюсь получить A4 при 72 ppi, я получаю измерение в обратном порядке.

>>> print(paperSizes["A4"]["72"])
{842, 595}
>>> print(paperSizes["A4"]["96"])
{794, 1123}

Это вызывает у меня проблемы, и я просто не могу понять, почему это происходит Есть ли основное поведение словаря, о котором я не знаю?

Ответы [ 2 ]

5 голосов
/ 22 апреля 2020

Вместо того, чтобы брать списки использования набора, и это решит вашу проблему.

0 голосов
/ 22 апреля 2020

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

paperSizes = {k: {i: sorted(j) for i, j in d.items()} for k, d in paperSizes.items()}

теперь вы можете распечатать и получить ожидаемый результат:

print(paperSizes["A4"]["72"])

# [595, 842]
...