のんびりしているエンジニアの日記

ソフトウェアなどのエンジニア的な何かを書きます。

もう怖くないPythonの順番変更

Sponsored Links

皆さんこんにちは
お元気ですか。私は元気です。
なんかLineのネタ記事が大盛況…少々驚きです。

さて、本日はPythonのsortedメソッドについて
皆さん、listの内容の順番を並び替えたいこと、ありませんか?

そんな時にこの関数を利用して、順番を変更することができます。

リスト

sortedを実行すれば並び替えをしてくれます。ただ、基本的に昇順ソートです。reverse=Trueにすると降順ソートを可能とします。

>>> list = [1,5,2,3,6,7]
>>> sorted(list)
[1, 2, 3, 5, 6, 7]
>>> sorted(list,reverse=True)
[7, 6, 5, 3, 2, 1]

辞書

dict = {1:"abcd",5:"cdfe",3:"aaaa",2:"aaaa"}

key sort

昇順
for key,value in sorted(dict.items()):
	print key,value

Output

1 abcd
2 aaaa
3 aaaa
5 cdfe
降順
for key,value in sorted(dict.items(),reverse=True):
	print key,value

Output

5 cdfe
3 aaaa
2 aaaa
1 abcd

Value Sort

key=lambda x:x[1]、すなわちlambda式を書き、中でソートさせたい値を返すように記載すれば問題無いです。

for key,value in sorted(dict.items(),key=lambda x:x[1]):
	print key,value

Output

2 aaaa
3 aaaa
1 abcd
5 cdfe

Classをソート

こちらもkeyにlamdbaを使い、ソートさせたい値を入れています。

class Foo(object):
	def __init__(self,number,number2):
		self.number = number
		self.number2 = number2

foo_list = []

for i in xrange(10):
	foo_list.append(Foo(i % 4,i))

for object in sorted(foo_list,key=lambda x:x.number):
	print object.number,object.number2

Output

0 0
0 4
0 8
1 1
1 5
1 9
2 2
2 6
3 3
3 7

全てのソースコード

#coding:utf-8
""" dictionary の並び替え"""
dict = {1:"abcd",5:"cdfe",3:"aaaa",2:"aaaa"}

print "key sort,昇順"

""" keyでのソート """
for key,value in sorted(dict.items()):
	print key,value

print "key sort,降順"

for key,value in sorted(dict.items(),reverse=True):
	print key,value

print "value sort 昇順"

""" valueでのソート """
for key,value in sorted(dict.items(),key=lambda x:x[1]):
	print key,value

""" Objectの並び替え """
class Foo(object):
	def __init__(self,number,number2):
		self.number = number
		self.number2 = number2

foo_list = []

for i in xrange(10):
	foo_list.append(Foo(i % 4,i))

print "class sort 昇順"

for object in sorted(foo_list,key=lambda x:x.number):
	print object.number,object.number2