2016-07-19 2 views
0

Я довольно новичок в использовании python. У меня есть список namedtuples, который я бы хотел отсортировать по одному из полей. Я в настоящее время есть код, который выглядит примерно так:Сортировка списка названных кортежей по полю

from collections import namedtuple 

testTuple = namedtuple("test", "name, number") 
from operator import itemgetter 

testList = [] 
seq = [testTuple(name = 'abc', number = '123'), 
testTuple(name = 'xyz', number = '32'), 
testTuple(name = 'def', number = '322')] 
print(sorted(seq, key= itemgetter(1))) 

Но, конечно, так как itemgetter сортирует по алфавиту кортеж, связанный с 123 печатается до того, что связано с 32. Я не уверен, могу ли я каким-то образом объединить ключ = itemgetter (x) с ключом = int для решения моей проблемы.

ответ

3

Я думаю, что писать небольшую функцию лямбда лучше вы будете в состоянии сделать:

from collections import namedtuple 

testTuple = namedtuple("test", ("name", "number")) 

seq = [testTuple(name = 'abc', number = '123'), 
     testTuple(name = 'xyz', number = '32'), 
     testTuple(name = 'def', number = '322')] 

print(sorted(seq, key=lambda x: int(x[1]))) 

# Output: 
# [test(name='xyz', number='32'), test(name='abc', number='123'), test(name='def', number='322')] 
Смежные вопросы