Pythonデータ構造ソートリストのアルファベット順


159

私はpythonのデータ構造について少し混乱しています。()、、[]および{}。単純なリストをソートしようとしています。おそらく、ソートに失敗しているデータのタイプを特定できないためです。

私のリストは簡単です: ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue']

私の質問は、これはどのような種類のデータであり、単語をアルファベット順に並べ替える方法ですか?


リストを並べ替える場合は、「list = ['Stem'、 'constitute'、 'Sedge'、 'Eflux'、 'Whim'、 'Intrigue'] list.sort()print list "を使用できます。
kannanrbk

[]組み込みのデータ型を囲みlistます(tutorialspoint.com/python/python_lists.htmを参照)。リストは単なる値のグループです(他の反復可能なオブジェクト(つまり、ネストされたリスト)を含めることができます)。()組み込みを囲みtupleます。これらは不変です(変更できません)。(tutorialspoint.com/python/python_tuples.htmを参照)。と{}組み込みを囲みdictionaryます。辞書(単語の場合)に対応します。「キー」が単語で、「値」が定義です。(tutorialspoint.com/python/python_dictionary.htmを参照してください)。
Rushy Panchal

回答:


231

[]意味のリストを()意味のタプルをして{}意味辞書を。これらはPythonでのプログラミングの基本であるので、公式のPythonチュートリアルご覧ください

あなたが持っているのは文字列のリストです。次のように並べ替えることができます。

In [1]: lst = ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue']

In [2]: sorted(lst)
Out[2]: ['Eflux', 'Intrigue', 'Sedge', 'Stem', 'Whim', 'constitute']

ご覧のとおり、大文字で始まる単語は小文字で始まる単語よりも優先されます。それらを個別にソートする場合は、次のようにします。

In [4]: sorted(lst, key=str.lower)
Out[4]: ['constitute', 'Eflux', 'Intrigue', 'Sedge', 'Stem', 'Whim']

次のようにして、リストを逆の順序で並べ替えることもできます。

In [12]: sorted(lst, reverse=True)
Out[12]: ['constitute', 'Whim', 'Stem', 'Sedge', 'Intrigue', 'Eflux']

In [13]: sorted(lst, key=str.lower, reverse=True)
Out[13]: ['Whim', 'Stem', 'Sedge', 'Intrigue', 'Eflux', 'constitute']

注意: Python 3を使用している場合str、は人間が読めるテキストを含むすべての文字列の正しいデータ型です。ただし、それでもPython 2を使用する必要がある場合unicodeは、Python 2ではなく、Python 2のデータ型を持つUnicode文字列を扱うことができstrます。このような場合、Unicode文字列のリストがある場合は、のkey=unicode.lower代わりに記述する必要がありますkey=str.lower


find_one()MongoDBデータベースのpymongo 結果に対して2番目の例を使用すると、エラーが発生します descriptor 'lower' requires a 'str' object but received a 'unicode'。結果は文字列の配列であり、次のように実装されます results['keywords'] = sorted(keywords['keywords'], key=str.lower)。誰かがこれを解決する方法を知っていますか?
user1063287

@ user1063287返信が遅くなってすみません。あなたの場合、のkey=unicode.lower代わりに書く必要がありますkey=str.lower。これは、バイト文字列ではなくユニコード文字列を扱っているためです。公式を参考にしてくださいユニコードHOWTO特にPythonの2と3の間のそれぞれの差のために、これに関する詳細については
pemistahl

32

Pythonにはと呼ばれる組み込み関数がありsorted、フィードする反復可能オブジェクトからリストのソートされたリストを提供します(リスト([1,2,3]); dict({1:2,3:4}、ただし、キーのソートされたリストを返すだけですが、セット({1,2,3,4) ;またはタプル((1,2,3,4)))。

>>> x = [3,2,1]
>>> sorted(x)
[1, 2, 3]
>>> x
[3, 2, 1]

リストにはsort、並べ替えをインプレースで実行するメソッドもあります(x.sort()はNoneを返しますが、xオブジェクトを変更します)。

>>> x = [3,2,1]
>>> x.sort()
>>> x
[1, 2, 3]

どちらもkey引数を取ります。引数は、並べ替えの基準を変更するために使用できる呼び出し可能(関数/ラムダ)である必要があります。
たとえば、(key,value)値でソートされたdictから-pairsのリストを取得するには、次のコードを使用できます。

>>> x = {3:2,2:1,1:5}
>>> sorted(x.items(), key=lambda kv: kv[1])  # Items returns a list of `(key,value)`-pairs
[(2, 1), (3, 2), (1, 5)]

12

あなたはPythonリストを扱っており、それをソートすることはこれを行うのと同じくらい簡単です。

my_list = ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue']
my_list.sort()


4

ListName.sort()アルファベット順に並べ替えます。reverse=False/Trueかっこを追加して、アイテムの順序を逆にすることができます。ListName.sort(reverse=False)


1
これはRubyへのコメントですか?
アランベリー

3
>>> a = ()
>>> type(a)
<type 'tuple'>
>>> a = []
>>> type(a)
<type 'list'>
>>> a = {}
>>> type(a)
<type 'dict'>
>>> a =  ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue'] 
>>> a.sort()
>>> a
['Eflux', 'Intrigue', 'Sedge', 'Stem', 'Whim', 'constitute']
>>> 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.