Я нашел то, что я искал в документах Apple. Короче говоря можно настроить объекты как свойства, которые Вы выпускаете и сохраняете (или просто @property, @synthesize), но Вы не имеете к для вещей как UILabels:
Вот один из способов сделать это:
>>> sorted(myDict.items(), key=lambda e: e[1][2])
[('item2', [8, 2, 3]), ('item1', [7, 1, 9]), ('item3', [9, 3, 11])]
Ключ
аргумент функции sorted
позволяет получить ключ сортировки для каждого элемента списка.
Чтобы перебирать ключи / значения в этом списке, вы можете использовать что-то вроде:
>>> for key, value in sorted(myDict.items(), key=lambda e: e[1][2]):
... print key, value
...
item2 [8, 2, 3]
item1 [7, 1, 9]
item3 [9, 3, 11]
Как сказал Джон Махлин, вы не можете сортировать словарь Python.
Однако вы можете создать индекс ключей, который можно сортировать в любом порядке.
Предпочтительный шаблон (идиома) Python для сортировки по любому альтернативному критерию называется «декорировать-сортировать-не декорировать» (DSU). В этой идиоме вы создаете временный список, который содержит кортежи вашего ключа (ключей), за которыми следуют исходные элементы данных, а затем вызываете обычный метод .sort () для этого списка (или, в более поздних версиях Python просто обернет ваше украшение в вызываемую встроенную функцию sorted () ). Затем вы удаляете "украшения".
Причина, по которой это обычно предпочтительнее передачи функции сравнения методу .sort () , заключается в том, что Python ' Встроенный код сортировки по умолчанию (скомпилированный на C в обычном Python на C) очень быстр и эффективен в случае по умолчанию, но намного, намного медленнее, когда ему приходится вызывать объектный код Python много-много раз в случае, отличном от стандартного. Так что обычно гораздо лучше перебирать данные, создавая структуры данных, которые могут быть переданы стандартным процедурам сортировки.
В этом случае вы должны иметь возможность использовать что-то вроде:
[y[1] for y in sorted([(myDict[x][2], x) for x in myDict.keys()])]
... это понимание списка, выполняющее undecorate из отсортированного списка кортежей, который возвращается пониманием внутреннего списка. Внутреннее понимание - это создание набора кортежей, желаемого ключа сортировки (3-й элемент списка) и ключа словаря, соответствующего ключу сортировки. myDict.keys (), конечно же, метод словарей Python, который возвращает список всех допустимых ключей в любом порядке, выбранном базовой реализацией - предположительно, простая итерация по хешам.
Более подробный способ сделать это может быть проще для чтения:
temp = list()
for k, v in myDict.items():
temp.append((v[2],))
temp.sort()
results = list()
for i in temp:
results.append(i[1])
Обычно такой код следует создавать итеративно в интерпретаторе с использованием небольших выборок данных. Создайте выражение или функцию "украшения". Затем заверните это в вызов sorted () . Затем создайте выражение без декорирования (которое обычно так же просто, как то, что я показал здесь).
Затем заверните это в вызов sorted () . Затем создайте выражение без украшений (которое обычно так же просто, как то, что я показал здесь). Затем заверните это в вызов sorted () . Затем создайте выражение без декорирования (которое обычно так же просто, как то, что я показал здесь).Вы заявили о двух совершенно разных желаниях:
Первый из них по определению невозможен - сортировка чего-либо подразумевает перестановку в каком-то порядке. Словари Python по своей сути неупорядочены. Второй вариант вряд ли возможен, но крайне маловероятен.
Что вы можете сделать, так это
Первый из них по определению невозможен - сортировка чего-либо подразумевает перестановку в некотором порядке. Словари Python по своей сути неупорядочены. Второй вариант вряд ли возможен, но крайне маловероятен.
Что вы можете сделать, так это
Первый из них по определению невозможен - сортировка чего-либо подразумевает перестановку в некотором порядке. Словари Python по своей сути неупорядочены. Второй вариант вряд ли возможен, но крайне маловероятен.
Что вы можете сделать, так это
«третий элемент в списке» для меня пахнет «третьим элементом в кортеже», а «e [1] [2]» просто пахнет :-) ... вам может понравиться исследовать использование именованных кортежей вместо списков; см. фабрика именованных кортежей
Если вы собираетесь часто выполнять извлечение / сортировку / обработку больших наборов данных, вы можете рассмотреть что-то подобное, используя поставляемый Python модуль sqlite3:
create table ex_dict (k text primary key, v0 int, v1 int, v2 int);
insert into ex_dict values('item1', 7, 1, 9);
-- etc etc
select * from ex_dict order by v2;