2012-04-23 2 views
0

У меня есть несколько списков, которые упорядочены по важности. Мне нужно сделать сортировку в этом списке. Важно то, что фамилия в списке важна. Если в списке есть два имени, как фамилия, тогда сначала следует печатать фамилию. Также мне нужно убедиться, что после сортировки регистр алфавитов не изменится.Сортировка имен в списке по порядку важности

>>> mylist = ["Ramesh G","K V R Santhosh","Srikanth T G", "R V Laxaman","Ramesh Ghosh"] 

>>> mylist.sort() 

>>> for x in sorted(mylist): 

...  print x 

... 

K V R Santhosh 
R V Laxaman 
Ramesh G 
Ramesh Ghosh 
Srikanth T G 

В вышеприведенном сортировкой я получаю «Рамеш G» напечатан первый, и мое требование к печати «Рамеш Гош» До «Рамеш G», как показано ниже:

K V R Santhosh 
R V Laxaman 
Ramesh Ghosh 
Ramesh G 
Srikanth T G 

Спасибо вам


Мне удалось написать код для сортировки имени по фамилии, но до сих пор не удалось выяснить, как печатать фамилию перед любым подобным именем в списке после сортировки.

#!/bin/python 
# sort a list of names by last name 

import operator 

data = input ("Enter the list: ") 

data_as_lists = [ line.split() for line in data ] 

data_as_lists.sort(key=operator.itemgetter(-1)) 

for each_item in data_as_lists : 
    print " ".join(each_item) 

Этот код выводит на выход, как показано ниже:

python sort_name.py 
Enter the list: ["Ramesh G","K V R Santhosh","Srikanth T G", "R V Laxaman","Ramesh Ghosh"] 
Ramesh G 
Srikanth T G 
Ramesh Ghosh 
R V Laxaman 
K V R Santhosh 

Нужный выход, который я хочу должен быть таким:

python sort_name.py 
    Enter the list: ["Ramesh G","K V R Santhosh","Srikanth T G", "R V Laxaman","Ramesh Ghosh"] 
    Ramesh Ghosh 
    Ramesh G 
    Srikanth T G 
    R V Laxaman 
    K V R Santhosh 

ответ

2

В Python 2.x вы можете передать cmp paramter to list.sort, где вы можете реализовать любую пользовательскую функцию сравнения, например

def mycmp(a, b): 
    if a.startswith(b): 
     return -1 
    return cmp(a, b) 

mylist = ["Ramesh G","K V R Santhosh","Srikanth T G", "R V Laxaman","Ramesh Ghosh"] 
mylist.sort(cmp=mycmp) 
print "\n".join(mylist) 

Выход:

K V R Santhosh 
R V Laxaman 
Ramesh Ghosh 
Ramesh G 
Srikanth T G 

В Python 3.x cmp аргумент был удален, но вы можете использовать cmp_to_key определены в Func инструментов

+0

Спасибо за ваш вклад В случае ниже он не для печати результата в соответствии с требованием. >>> MyList = [ "Аланы", "аланы", "аланы", "аланы", "аланы", "аланы", "аланы", "аланы", "аланы",» АЛАН "] >>> mylist.sort (CMP = mycmp) >>> печать "\ п" .join (MyList) Алан AlAn Алан Аланы Алан Алан Алан Алан Алан Алан Желаемый выход должен быть таким: ["alAN", "aLaN", " aLAn "," AlaN "," AlAn "," ALan "," alaN "," alAn "," aLan "," Alan "] – PratapSingh

+0

@PratapSingh изменяет функцию cmp в соответствии с вашим требованием, я показал пример того, как это можно сделать –

Смежные вопросы