Найти - Пользователи
Полная версия: Сортировка словаря (+ вложенный словарь)
Начало » Python для новичков » Сортировка словаря (+ вложенный словарь)
1 2 3
4kpt
k0st1an
А в чем проблема?
Для второго примера…
for name in rr2:
    print rr[name]["x"]
4kpt
py.user.next
Что-то первый код не работает….
d = {'test1': {'x': 12, 'y': 20}, 'test2': {'x': 11, 'y': 22}, 'test3': {'x': 14, 'y': 22}}
for k in sorted(d, key=lambda i: int(i[-1]), reverse=True):
    print(k, '->', d[k])
Должно выдать…
('test2', '->', {'y': 22, 'x': 11})
('test3', '->', {'y': 22, 'x': 14})
('test1', '->', {'y': 20, 'x': 12})
Сортировка ведь осуществляется по значению “х” :)
Fibio
ну как бы новый отсортированный словарь вы не получите, так как значения словаря хранятся в неотсортированном порядке, если нужен новый отсортированный словарь юзайте http://docs.python.org/2/library/collections.html#collections.OrderedDict

если нужно просто получить доступ к определенныйм эл-там словаря в зависимости от ‘x’, то никаких for:
>>> rr = {'test1': {'x': 12, 'y': 20}, 'test2': {'x': 11, 'y': 22}}
>>> sorted(rr, key=lambda var: rr[var]['x'])
['test2', 'test1']
4kpt
sorted(rr, key=lambda var: rr[var]['x'])
Блин. Знал же, что можно управлять сортировкой с помощью аргумента key, но забыл. Как раз напомнили. Спасибо.
k0st1an
Fibio
если нужно просто получить доступ к определенныйм эл-там словаря в зависимости от ‘x’, то никаких for:
>>> rr = {'test1': {'x': 12, 'y': 20}, 'test2': {'x': 11, 'y': 22}}
>>> sorted(rr, key=lambda var: rr[var]['x'])
['test2', 'test1']

ООО я как раз пробовал такой вариант… Но ошибся с ключами… После сортировки можно будет применить for и пострить новый объект, копию rr, но в нужном виде. Потери будут минимальны (хотя не грамотно )

И надо покрутить OrderedDict, спасибо )
py.user.next
4kpt
Сортировка ведь осуществляется по значению “х” :)
а я что-то подумал, что он хочет просто ключи словаря отсортировать

>>> d = {'test1': {'x': 12, 'y': 20}, 'test2': {'x': 11, 'y': 22}}
>>> for k in sorted(d, key=lambda i: d[i]['x']):
...     print(k, '->', d[k])
... 
test2 -> {'x': 11, 'y': 22}
test1 -> {'x': 12, 'y': 20}
>>>
4kpt
py.user.next
Я тоже у него пол дня допытывался, что он хочет…
dimy44
А я уже зарекся давать ответы на нечетко сформулированные вопросы. Было уже не раз. Чето стараешься, а на 10й пост оказывается, что ТС хотел совсем не это. Формулируйте вопросы четко и сразу!!!
4kpt
dimy44
В идеале это пост такого характера.
Дано то-то то-то.
Надо получить то-то то-то.
Пытался так-то и так-то.
ПОМОГИТЕ ПОЖАЛУЙСТА :)
dimy44
абсолютно верно. Дано. Получить хочу то-то и то-то, нюансы такие-то и такие-то. Хсн, пусть даже не пытался, если задача интересная, ответ дадут. Иной раз лучше честно признаться, что ноль, чем иммитировать попытку решения (что элементарно вычисляется). Нечетко сформулированный вопрос- это неуважение к людям, которые отбросят свои дела, чтоб вам попытаться бескорыстно помочь. Все ИМХО.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB