Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/47: Рейтинг темы: голосов - 47, средняя оценка - 4.70
2 / 2 / 4
Регистрация: 25.05.2013
Сообщений: 157

Отсортировать даты по 4 параметрам: год, месяц, день, время

30.03.2014, 05:44. Показов 10250. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть даты такого формата:
Fri, 28 Mar 2014 16:42:58 PDT
Fri, 28 Mar 2014 15:16:47 PDT
Sat, 29 Mar 2014 13:33:05 PDT
Sat, 29 Mar 2014 13:23:32 PDT
Sat, 29 Mar 2014 12:28:34 PDT
Sat, 29 Mar 2014 13:30:56 PDT
Sat, 29 Mar 2014 13:56:19 PDT

Нужно сортировать по 4 параметрам: год, месяц, день, время.

Подскажите какой-нибудь хороший способ решить задачу не используя миллионы ифов
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.03.2014, 05:44
Ответы с готовыми решениями:

Календарь,формат даты день-месяц-год изменить на год-месяц-день
Доброго времени суток! нашел календарь ,но в нем формат даты "день-месяц-год", а в бд дата хранится "год-месяц-день" , как...

1. Дан текстовый файл, содержащий даты в формате «день/месяц/год», причем под день и месяц отводится по две позиции, а п
1. Дан текстовый файл, содержащий даты в формате «день/месяц/год», причем под день и месяц отводится по две позиции, а под год ‒ четыре...

Как вытащить из даты-день,месяц,год,день недели?
Cells(i, 5).Value = Day(CDate(Cells(i, 3).Value)) Cells(i, 6).Value = Month(CDate(Cells(i, 3).Value)) Cells(i, 7).Value =...

6
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
30.03.2014, 09:17
Ну сортируй в 4 подхода, сначала по году (у тебя получится несколько списков например), потом по месяцу, потом по дате и т д
Ну это первая глупость пришедшая в голову, можно ещё посидеть по думать.
0
 Аватар для ilnurgi
141 / 141 / 38
Регистрация: 20.02.2012
Сообщений: 597
30.03.2014, 12:52
Лучший ответ Сообщение было отмечено MechanicPaul как решение

Решение

можно все эти строки первести в питон формат даты и сделать сортировку списка дат. а алгоритмов сортировок списков много.
2
50 / 31 / 4
Регистрация: 25.04.2013
Сообщений: 366
30.03.2014, 13:25
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
a=([5, 29 ,4, 2015, '16:42:58','PDT'],
[5, 29 ,4, 2015, '17:42:58','PDT'],
[5, 27 ,4, 2014, '15:16:47','PDT'],
[6, 28 ,4, 2013, '14:16:47','PDT'])
  
 
 
 
 
def func(ab,key):
    return ab[key]
    
 
result=[]
for x in sorted(a,key=lambda x=a:func(x,0),reverse=True):
    result.append(x)
 
a=result
result=[]
for x in sorted(a,key=lambda x=a:func(x,1),reverse=True):
    result.append(x)
    
a=result
result=[]
for x in sorted(a,key=lambda x=a:func(x,2),reverse=True):
    result.append(x)
 
a=result
result=[]
for x in sorted(a,key=lambda x=a:func(x,3),reverse=True):
    result.append(x)
 
a=result
result=[]
for x in sorted(a,key=lambda x=a:func(x,4),reverse=True):
    result.append(x)
    
print(result)
Правда входные параметры придется подкорректировать

Добавлено через 19 минут
Хотя не, не пашет )
0
45 / 39 / 24
Регистрация: 29.11.2013
Сообщений: 145
30.03.2014, 14:25
Лучший ответ Сообщение было отмечено MechanicPaul как решение

Решение

Может так:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#! /usr/bin/env python3.2
# coding: utf-8
 
result=[]
 
a=( [4, 1, 4, 2004, '16:42:58', 'PDT'],
    [3, 2, 1, 2002, '17:42:58', 'PDT'],
    [2, 3, 3, 2003, '15:16:47', 'PDT'],
    [1, 4, 2, 2001, '14:16:47', 'PDT']) 
 
def func(ab,key):
    return ab[key]
c=0
for x in sorted(a,key=lambda x=a:func(x,0),reverse=True):
    c+=1
    result.append(x)
    if c == 4:
        result.append('***')
 
c=0
for x in sorted(a,key=lambda x=a:func(x,1),reverse=True):
    c+=1
    result.append(x)
    if c == 4:
        result.append('***')
 
c=0
for x in sorted(a,key=lambda x=a:func(x,2),reverse=True):
    c+=1
    result.append(x)
    if c == 4:
        result.append('***')
 
c=0
for x in sorted(a,key=lambda x=a:func(x,3),reverse=True):
    c+=1
    result.append(x)
    if c == 4:
        result.append('***')
 
c=0
for x in sorted(a,key=lambda x=a:func(x,4),reverse=True):
    c+=1
    result.append(x)
    if c == 4:
        result.append('***')
 
for x in result:
    print(x)
    print('*******************')
1
2 / 2 / 4
Регистрация: 25.05.2013
Сообщений: 157
30.03.2014, 17:47  [ТС]
проблема всех этих способов в том, что они по очереди сортируют по определённому параметру и в итоге результаты предыдущих сортировок не учитываются.

Вот результат работы при входных данных:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
a=( [4, 29, 2, 2004, '16:42:58', 'PDT'],
    [3, 28, 2, 2002, '17:42:58', 'PDT'],
    [2, 28, 2, 2003, '15:16:47', 'PDT'],
    [1, 29, 2, 2004, '14:16:47', 'PDT'])
 
 
 
[4, 29, 2, 2004, '16:42:58', 'PDT']
*******************
[3, 28, 2, 2002, '17:42:58', 'PDT']
*******************
[2, 28, 2, 2003, '15:16:47', 'PDT']
*******************
[1, 29, 2, 2004, '14:16:47', 'PDT']
*******************
***
*******************
[4, 29, 2, 2004, '16:42:58', 'PDT']
*******************
[1, 29, 2, 2004, '14:16:47', 'PDT']
*******************
[3, 28, 2, 2002, '17:42:58', 'PDT']
*******************
[2, 28, 2, 2003, '15:16:47', 'PDT']
*******************
***
*******************
[4, 29, 2, 2004, '16:42:58', 'PDT']
*******************
[3, 28, 2, 2002, '17:42:58', 'PDT']
*******************
[2, 28, 2, 2003, '15:16:47', 'PDT']
*******************
[1, 29, 2, 2004, '14:16:47', 'PDT']
*******************
***
*******************
[4, 29, 2, 2004, '16:42:58', 'PDT']
*******************
[1, 29, 2, 2004, '14:16:47', 'PDT']
*******************
[2, 28, 2, 2003, '15:16:47', 'PDT']
*******************
[3, 28, 2, 2002, '17:42:58', 'PDT']
*******************
***
*******************
[3, 28, 2, 2002, '17:42:58', 'PDT']
*******************
[4, 29, 2, 2004, '16:42:58', 'PDT']
*******************
[2, 28, 2, 2003, '15:16:47', 'PDT']
*******************
[1, 29, 2, 2004, '14:16:47', 'PDT']
*******************
***
*******************
А должно быть:
Python
1
2
3
4
5
6
a=( 
    [4, 29, 2, 2004, '16:42:58', 'PDT'],
    [1, 29, 2, 2004, '14:16:47', 'PDT'],
    [2, 28, 2, 2003, '15:16:47', 'PDT'],
    [3, 28, 2, 2002, '17:42:58', 'PDT']
)
Т.е выходит что это обычная сортировка по одному ключу, просто меняется сам ключ.

Добавлено через 1 час 42 минуты
Было лень смотреть формат даты Питона, поэтому сразу в sqlite3 формат переводил и их штатными средствами сортировал.
0
224 / 209 / 63
Регистрация: 26.05.2011
Сообщений: 363
31.03.2014, 04:22
Python
1
2
3
4
5
6
7
8
9
10
11
12
from dateutil import parser
 
DATES = ["Fri, 28 Mar 2014 16:42:58 PDT",
         "Fri, 28 Mar 2014 15:16:47 PDT",
         "Sat, 29 Mar 2014 13:33:05 PDT",
         "Sat, 29 Mar 2014 13:23:32 PDT",
         "Sat, 29 Mar 2014 12:28:34 PDT",
         "Sat, 29 Mar 2014 13:30:56 PDT",
         "Sat, 29 Mar 2014 13:56:19 PDT"]
 
if "__main__" == __name__:
    print(sorted(DATES, key=lambda x: parser.parse(x)))
ЗЫ. python-dateutil можно взять здесь.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.03.2014, 04:22
Помогаю со студенческими работами здесь

Дана дата в виде строки в американском формате месяц/день/год. Переделать ее в русский формат день.месяц.год. проверить
1)Дана дата в виде строки в американском формате месяц/день/год. Переделать ее в русский формат день.месяц.год. 2)проверить правильно...

Дана дата в виде строки в американском формате месяц/день/год. Переделать ее в русский формат день.месяц.год
Создать функцию. Дана дата в виде строки в американском формате месяц/день/год. Переделать ее в русский формат день.месяц.год. ...

Как от даты отнять год, месяц, день?
Добрый день. Подскажите, как получить Data_N: Есть таблица вида: |Data |Y|M|D|Data_N| |01.11.2015|4|3|5| | ...

Проверить корректность введенной даты (день, месяц, год)
Помогите срочно надо)) Проверить корректность введенной даты (день, месяц, год)

Как в maskedit с форматом даты увеличить ее на год, месяц или день?
Есть маскэдит. Маска ввода Дата. Надо чтобы при нажатии на кнопку эта дата увеличивалась. Надо чтобы пользователь сам что увеличить( ну это...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru