Форум сайта python.su
0
Здравствуйте.
Есть словарь вида:
defaultdict(<class 'str'>, {'a_file1.txt': ('1', '17 bytes Fri Sep 28 16:55:08 2018 '),
'c_file2.txt': ('2', '16 bytes Fri Sep 28 16:55:13 2018 '),
'b_file3.txt': ('3', '15 bytes Fri Sep 28 16:08:06 2018 ')})myDict[0][1][2]
Отредактировано na9ort (Окт. 1, 2018 11:03:36)
Офлайн
72
Попробуйте так:
new_myDict = sorted(myDict.items(), key=lambda x: x[1])
Офлайн
73
>>> dct = { 'a_file1.txt': ('1', '17 bytes Fri Sep 28 16:55:08 2018 '), 'b_file3.txt': ('3', '15 bytes Fri Sep 28 16:08:06 2018 '), 'c_file2.txt': ('2', '16 bytes Fri Sep 28 16:55:13 2018 ') } >>> dct = dict(sorted(dct.items() ,key = lambda x : x[0])) >>> print(dct) {'a_file1.txt': ('1', '17 bytes Fri Sep 28 16:55:08 2018 '), 'b_file3.txt': ('3', '15 bytes Fri Sep 28 16:08:06 2018 '), 'c_file2.txt': ('2', '16 bytes Fri Sep 28 16:55:13 2018 ')} >>>
Отредактировано marvellik (Окт. 1, 2018 12:10:53)
Офлайн
1
na9ortЛегко можно, если ключ словаря - число.
К словарю ведь нельзя обращаться по цифровым индексам типа
na9ortСловарь сортировать вообще бессмысленно, вам нужна другуя структура, которая будет содержать отсортированное значение.
Нужно отсортировать словарь по первому элементу в значении.
na9ort
не получается
d = {'a_file1.txt': ('1', '17 bytes Fri Sep 28 16:55:08 2018 '), 'c_file2.txt': ('2', '16 bytes Fri Sep 28 16:55:13 2018 '), 'b_file3.txt': ('3', '15 bytes Fri Sep 28 16:08:06 2018 ')} s = sorted(d.items(), key=lambda x: int(x[1][0])) print(s)
Офлайн
0
rami
new_myDict = sorted(myDict.items(), key=lambda x: x)
def sortedValue(item): return item[0]
Отредактировано na9ort (Окт. 1, 2018 12:27:25)
Офлайн
1
na9ort
Хм…интересно. Если использовать лямбда-функции, то индексация элементов идёт сплошной нумерацией, если написать отдельную функцию, то относительной.
То есть для лямбда-функции значение элемента “1” имеет индекс 1, “a_file1.txt” - индекс 0, “17 bytes Fri Sep 28 16:55:08 2018 ” - индекс 2.
Для отдельной функции:
Офлайн
0
Papa_SvinИмелся виду случай при ключе типа str. Со значениями не числами.
Легко можно, если ключ словаря - число.
Papa_SvinСловарь это неупорядоченная структура. Я знаю. Мне сортировка для вывода нужна.
Словарь сортировать вообще бессмысленно.
Papa_SvinЕщё раз. Через лямбда-функцию делается так:
ЧЕГО???
key = lambda x: x[1]
def sortedValue(item):
return item[0]
lambda x: int(x[1][0])
Офлайн
1
na9ortДруг, НЕТ НИКАКОЙ РАЗНИЦЫ лямбду ты используешь или нелямбду. Покажи оба примера. Потому что ты просто говоришь глупости.
Элемент словаря то один и тот же, но нумерация индекса отличается.
d = {'a_file1.txt': ('1', '17 bytes Fri Sep 28 16:55:08 2018 '), 'c_file2.txt': ('2', '16 bytes Fri Sep 28 16:55:13 2018 '), 'b_file3.txt': ('3', '15 bytes Fri Sep 28 16:08:06 2018 ')} s = sorted(d.items(), key=lambda x: int(x[1][0])) print(s) def keyfunc(item): return int(item[1][0]) print(sorted(d.items(), key=keyfunc))
Офлайн
0
Papa_SvinА ну да, мой косяк. Прошу прощения.
НЕТ НИКАКОЙ РАЗНИЦЫ
>>> d = {'a_file1.txt': ('1', '17 bytes Fri Sep 28 16:55:08 2018 '), 'c_file2.txt': ('2', '16 bytes Fri Sep 28 16:55:13 2018 '), 'b_file3.txt': ('3', '15 bytes Fri Sep 28 16:08:06 2018 ')} >>> def keyFunc(item): return item[0] >>> for key, value in sorted(d.items(), key = lambda x: x[1]): print(key, value) a_file1.txt ('1', '17 bytes Fri Sep 28 16:55:08 2018 ') c_file2.txt ('2', '16 bytes Fri Sep 28 16:55:13 2018 ') b_file3.txt ('3', '15 bytes Fri Sep 28 16:08:06 2018 ') >>> for key, value in sorted(d.items(), key = keyFunc): print(key, value) a_file1.txt ('1', '17 bytes Fri Sep 28 16:55:08 2018 ') b_file3.txt ('3', '15 bytes Fri Sep 28 16:08:06 2018 ') c_file2.txt ('2', '16 bytes Fri Sep 28 16:55:13 2018 ') >>> def keyFunc(item): return item[1] >>> for key, value in sorted(d.items(), key = keyFunc): print(key, value) a_file1.txt ('1', '17 bytes Fri Sep 28 16:55:08 2018 ') c_file2.txt ('2', '16 bytes Fri Sep 28 16:55:13 2018 ') b_file3.txt ('3', '15 bytes Fri Sep 28 16:08:06 2018 ') >>>
Офлайн
72
Если нужно сортировать как числа, использовать как предложил Papa_Svin:
key=lambda x: int(x[1][0])
key=lambda x: x[1]
Офлайн