2010-11-27 13 views
2

たとえば、ユーザー名のリストがある場合、このリストを呼び出すことができます。L1、各ユーザー名には独自のプロファイルがあります(L1には格納されません)。ユーザー名が実際の名前に関連付けられている場合、ユーザー名で並べ替えるように関数を記述する必要があります。注:ユーザー名はusername[1]と書いてユーザー名を取得できます。ユーザー名は一意です。ユーザー定義ルールを使用したアイテムの並べ替え

これは私が書いたものである:

def username(s1, s2): 

    if s1 < s2: 
     return -1 
    elif s1 > s2: 
     return 1 
    else: 
     # How can i sort them by username if they have the same actual name 
     return 0 

答えて

2

あなたは常にリストのユーザー名を格納し、ユーザー名のソートされたリストを作成する組み込みsorted()機能を使用することができます。例:この結果は、ユーザーのリストになり

users = ['Guido', 'Alex', 'Jack', 'Brian'] 
users_sorted = sorted(users) 
print repr(users_sorted) 

はアルファベット順にソート:あなたは、リスト内の項目を比較するための特別な方法を定義したいので、もし

['Alex', 'Brian', 'Guido', 'Jack'] 

sortedは、いくつかの引数を取り、 sorted(user, cmp=function)を実行することができます。ここでは、関数は特別な比較関数です。

詳細については、docs on sorted()を参照してください。

2
sorted_username_list = sorted(usernames, key=user_sorter) 

usernames

user_sorterは、ユーザ名を取り、同じ実際の名前のために

ユーザーの実際の名前を返す関数である、あなたのようにソーター機能を書くことができるリストでありますこの:

def user_sorter(x): 
    return actual_name_of_user(x) + x 
2

e sorted(iterable, key=function)。たとえば:

users = list(something) # a list of all the usernames 
user_profiles = dict(something) # a dict of the profiles 

users_sorted = sorted(users, key=lambda un: user_profiles[un]) 

はまた、あなたのユーザープロファイルデータクラスのオーバーライド__gt__(), __eq__() and __lt__()によって>、=と<などの比較演算子をオーバーロードすることができます。詳細については、Python 2.7 reference - Data modelを参照してください。

0

argsをタプルにパックし、組み込みの並べ替えを使用して並べ替えます。 その後、開梱してください。

usernames = ['bbob', 'srv', 'gman', 'salmer'] 
firstnames = ['Billy', 'Steve', 'Guy', 'Steve'] 
tuples = zip(firstnames, usernames) 
tuples.sort() 
users_sorted, first_sorted = zip(*tuples) 


>>>tuples 
[('Billy', 'bbob'), ('Guy', 'gman'), ('Steve', 'salmer'), ('Steve', 'srv')] 
関連する問題