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')))