たとえば、私はのリストを持っているでしょう
lists = ['jack 20', 'ben 10', 'alisdar 50', 'ollie 35']
数に基づいて並べ替える必要があります。
lists.sort() = ['ben 10', 'jack 20', 'ollie 35', 'alisdar 50']
どういうわけかsplit()でフォーマットを使用することは可能ですか?
関数を使用しkey
ます:
lists.sort(key=lambda s: int(s.rsplit(None, 1)[-1]))
呼び出し可能オブジェクトは、のkey
すべての要素に渡されlists
、その要素は戻り値に従ってソートされます。この場合、
toの引数key
は任意の呼び出し可能ですが、ラムダはよりコンパクトです。コマンドプロンプトで試すことができます。
>>> key_function = lambda s: int(s.rsplit(None, 1)[-1])
>>> key_function('ben 10')
10
>>> key_function('Guido van Rossum 42')
42
実際、値を並べ替えると、その関数の戻り値が追加され、並べ替えられる内容は次のようになります。
[(20, 0, 'jack 20'), (10, 1, 'ben 10'), (50, 2, 'alisdar 50'), (35, 3, 'ollie 35')]
代わりに(2番目の値である要素のインデックスを追加して、ソートキーが等しい場合に元の順序を維持します)。
結果:
>>> lists = ['jack 20', 'ben 10', 'alisdar 50', 'ollie 35']
>>> lists.sort(key=lambda s: int(s.rsplit(None, 1)[-1]))
>>> lists
['ben 10', 'jack 20', 'ollie 35', 'alisdar 50']
必要なことを実行する関数を使用しkey
ます。
lists.sort(key=lambda e: int(e.split()[1]))
一部のアイテムがその形式に従わない場合は、もう少し手の込んだものを書く必要があります。
たとえば、人の名前や年齢を表す文字列よりも適切なデータ型があればよいでしょう。1つの方法は辞書です:
lists = ['jack 20', 'ben 10', 'alisdar 50', 'ollie 35']
d = dict(item.split(' ') for item in lists)
これにより、2要素リストのストリームから辞書が作成されます。
次に、次のように並べ替えることができます。
print sorted((v, k) for k, v in d.iteritems())
そしてこれを入手してください:
>>> lists = ['jack 20', 'ben 10', 'alisdar 50', 'ollie 35']
>>> d = dict(item.split(' ') for item in lists)
>>> print sorted((v, k) for k, v in d.iteritems())
[('10', 'ben'), ('20', 'jack'), ('35', 'ollie'), ('50', 'alisdar')]
または、年齢を整数に変換することもできます。
>>> lists = ['jack 20', 'ben 10', 'alisdar 50', 'ollie 35']
>>> person_iter = (item.split(' ') for item in lists)
>>> d = {k: int(v) for k, v in person_iter}
>>> print sorted((v, k) for k, v in d.iteritems())
[(10, 'ben'), (20, 'jack'), (35, 'ollie'), (50, 'alisdar')]
person_iter
name-ageのペアを生成するジェネレータです。それを辞書の理解にフィードし、2番目の引数を整数に変換します。
ただし、基本的な考え方は、目的に応じてより正確なデータ型を使用すると、より簡単に時間を過ごすことができるということです。