2012-04-23 68 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

在蟒蛇2.x的,你可以通過一個cmp參數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 = [ 「阿蘭」, 「ALAN」, 「ALAN」, 「ALAN」, 「阿蘭」, 「ALAN」, 「ALAN」, 「ALAN」, 「ALAN」,」 ALAN「] >>> mylist.sort(CMP = mycmp) >>>打印 」\ n「 個。加入(MYLIST) 羅志祥 艾倫 艾倫 艾倫 艾倫 艾倫 艾倫 艾倫 艾倫 艾倫 期望的輸出應該是這樣的: [「alAN」,「aLaN」,「 alan「,」AlaN「,」AlAn「,」ALan「,」alaN「,」alAn「,」aLan「,」Alan「] – PratapSingh 2012-04-23 18:53:21

+0

@PratapSingh根據您的要求修改cmp功能,它可以完成 – 2012-04-23 19:45:55