Установка порядка в словаре - PullRequest
0 голосов
/ 25 сентября 2018

Я новичок в Python.не знаю, как я могу установить порядок в словаре?,Я искал и узнал, что это можно сделать через from collections import OrderedDict, но не знаю, как его использовать.я пытаюсь нижеприведенный код для сравнения двух словаря, но я не получаю вывод в порядке.

d = { k[0]: k[1:] for k in a }
d2= { k[0]: k[1:] for k in b }
p = {i:j for i,j in d2.items() if i not in d} 
q = {i:j for i,j in d.items() if i not in d2}

Есть идеи, как это сделать?

Обновлен вопрос:

i have a nested list . How to get each list of nested list in next line ?

[['Eth116/1/12        sales            connected 1         full    10G     Fabric Exte'], ['Eth116/1/13   marketing        connected 190       full    100                ']]

Ожидаемый результат:

Eth116/1/12        sales            connected 1         full    10G     Fabric Exte
Eth116/1/13   marketing        connected 190       full    100                

1 Ответ

0 голосов
/ 25 сентября 2018

Словари не упорядочены, и вы мало что можете сделать, чтобы изменить это, если не считать свой собственный подкласс dict (не рекомендуется).Использование OrderedDict будет работать, как показано в комментарии героев hiro, при условии, что вы помните, что порядок в OrderedDict - это порядок вставки и не связан со значениями ключей.,(То же самое относится к порядку Python 3 dict с.) Если a и b имеют одинаковые элементы, но в другом порядке, то результирующие OrderedDict с не будут равны, если вы не сортируете a и b заранее.

Если вы хотите сравнить два dict, где вы не можете легко определить порядок вставки, вам нужна структура данных, которая поддерживает неупорядоченные сравнения.У меня не было ваших данных, поэтому я должен был сделать некоторые.Я начал с этого ввода

>>> a
[[1, 3, 5, 7, 9], [4, 9, 14, 19, 24, 29, 34, 39], [8, 17, 26, 35, 44, 53, 62, 71], [9, 19, 29, 39, 49, 59, 69, 79, 89]]
>>> b
[[1, 3, 5, 7, 9], [4, 9, 14, 19, 24, 29, 34, 39], [8, 17, 26, 35, 44, 53, 62, 71]]

Как видите, a имеет один дополнительный элемент, начинающийся 9.

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

>>> d = { k[0]: tuple(k[1:]) for k in a }
>>> d2= { k[0]: tuple(k[1:]) for k in b }

Затем вы можете преобразовать словари в наборы для неупорядоченного сравнения:

>>> s = set(d.items())
>>> s2 = set(d2.items())
>>> s == s2
False

И вы можетеиспользуйте операторы множеств, чтобы узнать, в чем разница:

>>> s2 <= s
True
>>> s - s2
set([(9, (19, 29, 39, 49, 59, 69, 79, 89))])
...