Форум сайта python.su
0
Есть словарь такого вида:
>>> rr {'test1': {'x': 12, 'y': 20}, 'test2': {'x': 11, 'y': 22}}
rr[<что-то>]['x']
Отредактировано k0st1an (Фев. 7, 2013 15:18:33)
Офлайн
63
Сортировка по ключу?
Офлайн
0
Исправил пост, не заметил что код был съеден парсером.
Офлайн
63
Т.е. сортировка должна быть по одному из значений словаря.
А что должно быть в отсортированном объекте - ключи (или пары: ключ-значение)?
Офлайн
0
Тот же объект, что и сортируется, только в отсортированном виде - сортировка по ключу. выход должен быть такой (новый объект - rr2):
test2
test1
…
А потом я уже буду его прогонять через for и брать нужные параметры.
for item in rr2: print(rr2[item]['x'], rr2[item]['y'])
Офлайн
63
На скорую руку…
rr2 = dict(zip([rr[i]["x"] for i in rr], rr.keys())) rr3 = [rr2[x] for x in sorted(rr2)]
rr2 = [key[1] for key in sorted([(rr[name]["x"], name) for name in rr])]
rr = {'test1': {'x': 12, 'y': 20}, 'test2': {'x': 11, 'y': 22}} x_and_key = [] result = [] for name in rr: x_and_key.append((rr[name]["x"], name)) for pos, key in sorted(x_and_key): result.append(key) print result
Отредактировано 4kpt (Фев. 7, 2013 16:24:20)
Офлайн
0
Спасибо, буду разбираться как это работает )))
Не люблю тупо копипастить ))
Офлайн
63
Хорошо с пояснениями:
rr = {'test1': {'x': 12, 'y': 20}, 'test2': {'x': 11, 'y': 22}} x_and_key = [] result = [] for name in rr: # Перебираем все ключи словаря rr # Добавляем в список x_and_key наборы, состоящие из пар: # значение по ключу "x" вложенного словаря и ключ основного словаря, # которому это значение соответствует... x_and_key.append((rr[name]["x"], name)) for pos, key in sorted(x_and_key): # Сортирую полученный список по первым элементам вложенных кортежей... # и формирую список, состоящий из ключей основного словаря. result.append(key) print result
Отредактировано 4kpt (Фев. 7, 2013 20:40:19)
Офлайн
0
Посмотрел. Да формируется список, но данные во вложенном словаре теряются. Нельзя обратится так:
result['test2']['x']
Офлайн
857
>>> d = {'test1': {'x': 12, 'y': 20}, 'test2': {'x': 11, 'y': 22}} >>> for k in sorted(d, key=lambda i: int(i[-1]), reverse=True): ... print(k, '->', d[k]) ... test2 -> {'x': 11, 'y': 22} test1 -> {'x': 12, 'y': 20} >>>
>>> import re >>> >>> d = {'test11': {'x': 12, 'y': 20}, 'test2': {'x': 11, 'y': 22}} >>> >>> f = lambda s: int(re.search(r'\d+$', s).group(0)) >>> >>> for k in sorted(d, key=f): ... print(k, '->', d[k]) ... test2 -> {'x': 11, 'y': 22} test11 -> {'x': 12, 'y': 20} >>>
Отредактировано py.user.next (Фев. 8, 2013 00:32:25)
Офлайн