d = { 'a':{'k':1, 'b':'whatever'}, 'b':{'k':2, 'b':'sort by k'} }
Хотите отсортировать этот словарь по k как по убыванию, в python.
Немного сложно, пожалуйста, помогите.
d = { 'a':{'k':1, 'b':'whatever'}, 'b':{'k':2, 'b':'sort by k'} }
Хотите отсортировать этот словарь по k как по убыванию, в python.
Немного сложно, пожалуйста, помогите.
dict являются неупорядоченными. Таким образом, нет возможности сортировать их напрямую, но если вы
желая преобразовать dict в список (key, value) -tuples, тогда вы можете сделать это:
In [9]: d
Out[9]: {'a': {'b': 'whatever', 'k': 1}, 'b': {'b': 'sort by k', 'k': 2}}
In [15]: sorted(d.items(),key=lambda x: x[1]['k'],reverse=True)
Out[15]: [('b', {'b': 'sort by k', 'k': 2}), ('a', {'b': 'whatever', 'k': 1})]
Этот отличный mini-howto объясняет использование параметра key.
Используйте OrderedDict, если вы используете python 2.7 или новее.
Упорядоченные словари похожи на обычные словари, но они помнят порядок вставки элементов. При повторении по упорядоченному словарю элементы возвращаются в порядке их добавления.
В примере
>>> # regular unsorted dictionary
>>> d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}
>>> # dictionary sorted by key
>>> OrderedDict(sorted(d.items(), key=lambda t: t[0]))
OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])
Чтобы попытаться добиться чего-то такого же эффекта для python 2.4 или ниже, см.
Вставка замены для новых коллекций Py2.7.OrderedDict, который работает в Python 2.4-2.6.
Словари не сортируются. Это не содержательная концепция. Ключи и значения не являются концептуально ни в каком "порядке", поэтому вы не можете изменить, в каком порядке они находятся.
Если у вас есть словарь (данные) с суб-словарями (d1 и d2), содержащими значение (v) и приоритет (p), если вы хотите отсортировать словарь для намерения повторить его, тогда вы можете сделайте следующее:
data = { "d1": { "v": "hello", "p": 3}, "d2": {"v": "hi again", "p": 1},}
for item in sorted(data.keys(), key=lambda x: data[x]['p']):
print item
from collections import OrderedDict
from operator import *
d = { 'a':{'k':1, 'b':'whatever'}, 'b':{'k':2, 'b':'sort by k'} }
sorted_d = OrderedDict(sorted(d.items(), key=lambda x: getitem(x[1], 'k')))