Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 25, 2016 12:45:36

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Инициация значений словаря int'овскими значениями

 from operator import itemgetter
a = {3:0, 2:1, 1:2}
print(sorted(a.items(), key=itemgetter(1))[:2])
[(3, 0), (2, 1)]

Офлайн

#2 Авг. 30, 2016 13:39:45

coffe4wolf
Зарегистрирован: 2016-04-21
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Инициация значений словаря int'овскими значениями

Снова вопрос про сортировку словаря по ключам. Сортирую его через sorted, но сортировка получается немного странная

 def posname():
    tuples = ()
    name_dict = {}
    i_file = open('baby1990.html', 'rU')
    text = i_file.read()
    tuples = re.findall(r'<td>(\d+)</td><td>(\w+)</td>\<td>(\w+)</td>',text)
    for (rank, b_name, g_name) in tuples:
        name_dict[rank] = (b_name, g_name)
    b = name_dict.keys()
    b = list(b)
    b.sort()
    for rank in b:
        print(rank + '=>' + str(name_dict[rank]))

Грабим выводим построчно столбиками - первый столбик порядковый номер от 1 до 1000, 2 и 3 столбики имена. В итоге вывод выходит такой

1=>('Michael', ‘Jessica’)
10=>('Joseph', ‘Lauren’)
100=>('Gabriel', ‘Shelby’)
1000=>('Tate', ‘Peggy’)
101=>('Miguel', ‘Kaitlin’)
102=>('Seth', ‘Margaret’)
103=>('Douglas', ‘Brandi’)
104=>('Logan', ‘Krystal’)
105=>('Spencer', ‘Natasha’)
106=>('Derrick', ‘Casey’)
107=>('Wesley', ‘Bethany’)
108=>('Johnathan', ‘Haley’)
109=>('Frank', ‘Briana’)
11=>('Ryan', ‘Megan’)
110=>('Chase', ‘Kara’)
111=>('Philip', ‘Rachael’)
112=>('Lucas', ‘Miranda’)

Что не так?

Upd: я понял что не так - он сортирует ключи как строки, а не как int.
И как по-красивее преобразовать значения ключей в int'овские?

Отредактировано coffe4wolf (Авг. 30, 2016 14:40:24)

Офлайн

#3 Авг. 30, 2016 16:17:09

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9992
Репутация: +  857  -
Профиль   Отправить e-mail  

Инициация значений словаря int'овскими значениями

coffe4wolf
я понял что не так - он сортирует ключи как строки, а не как int.
  
>>> lst = ['1', '10', '2', '20']
>>> lst.sort(key=lambda i: int(i))
>>> lst
['1', '2', '10', '20']
>>> 



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version