>>> rr {'test1': {'x': 12, 'y': 20}, 'test2': {'x': 11, 'y': 22}}
Мне надо сделать сортировку по
rr[<что-то>]['x']
Дело в том, что <что-то> всегда разное.
>>> rr {'test1': {'x': 12, 'y': 20}, 'test2': {'x': 11, 'y': 22}}
rr[<что-то>]['x']
for item in rr2: print(rr2[item]['x'], rr2[item]['y'])
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
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
result['test2']['x']
>>> 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} >>>