2016-09-27 2 views
0

у меня есть 2 списка причем последовательность значений во втором списке карте несколько месяцев в первом списке:карта питона список месяцев до значений

['Apr-16', 'Jul-16', 'Dec-15', 'Sep-16', 'Aug-16', 'Feb-16', 'Mar-16', 'Jan-16', 'May-16', 'Jun-16', 'Oct-15', 'Nov-15'] 
[15, 15, 6, 81, 60, 36, 6, 18, 36, 27, 24, 29] 

Мне нужно, чтобы сохранить 2 отдельные списки для использования в другой функция. Используя python, как мне добиться сортировки списков в ежемесячном порядке, сохраняя существующее сопоставление значений до нескольких месяцев?

ответ

1

Идея заключается в том, чтобы

  • ассоциированных оба списка
  • сортировать полученный список пара в зависимости от года/критериев месяца (месяцы должны быть преобразован в месяце индексов первым, используя вспомогательный словарь)
  • затем отделите список пар обратно до 2 списков, но теперь отсортированы в соответствии с датой.

Вот прокомментированный код, который делает то, что вы хотите, может быть, не самый компактный или академический, но работает и достаточно прост.

a = ['Apr-16', 'Jul-16', 'Dec-15', 'Sep-16', 'Aug-16', 'Feb-16', 'Mar-16', 'Jan-16', 'May-16', 'Jun-16', 'Oct-15', 'Nov-15'] 
b = [15, 15, 6, 81, 60, 36, 6, 18, 36, 27, 24, 29] 

# create a dictionary key=month, value=month index 
m = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'] 
monthdict = dict(zip(m,range(len(m)))) 

# the sort function: returns sort key as (year as integer,month index) 
def date_sort(d): 
    month,year = d[0].split("-") 
    return int(year),monthdict[month] 

# zip both lists together and apply sort 
t = sorted(zip(a,b),key=date_sort) 

# unzip lists 
asort = [e[0] for e in t] 
bsort = [e[1] for e in t] 

print(asort) 
print(bsort) 

результат:

['Oct-15', 'Nov-15', 'Dec-15', 'Jan-16', 'Feb-16', 'Mar-16', 'Apr-16', 'May-16', 'Jun-16', 'Jul-16', 'Aug-16', 'Sep-16'] 
[24, 29, 6, 18, 36, 6, 15, 36, 27, 15, 60, 81] 
Смежные вопросы