今回は、Python CollectionsモジュールのUserDictとUserListに注目します。
では、さっそく始めましょう。
Python collections module – A Quick Brush Up!
Pythonは様々な形式のデータを扱い、自動化と持続可能性を推進するためのモジュールを数多く提供しています。
そのようなモジュールの1つがPython Collectionsモジュールです。
コレクションモジュールは、同じような種類のデータを一つ屋根の下に保存する簡単な方法を提供してくれます。
コレクションは、その名が示すように、同様の特性を共有するエンティティのグループであり、同じことが、Collectionsモジュールが提供する機能です。
この記事では、モジュールによって提供される以下のコレクションに焦点を当てます。
- ユーザーディクト
- ユーザーリスト
次のセクションで、それぞれについて見てみましょう。
Python UserDict を理解する
ご存知のように、Pythonはキー・バリュー形式のデータを扱うために辞書データ構造を提供しています。
UserDictはそれにカスタマイズを加えたものです。
つまり、Dictionaryは、静的な形式でキーと値のペアを保持するデータ構造を作成するのに役立ちます。
UserDictでは、カスタマイズされたDictionaryを作成することで、いくつかの変更された機能を追加することができます。
UserDictは、Dictionaryオブジェクトを囲むラッパー・クラスのように振る舞います。
これによって、既存の辞書オブジェクトに新しい動作を簡単に追加することができます。
UserDictコレクションは、既存の辞書を引数として受け取り、通常のdictオブジェクトに格納されている辞書構造をトリガーします。
以下の構文を見てください。
collections.UserDict(data) |
例えば、以下の様になります。
以下の例では、既存の辞書オブジェクトを使用してUserDictを作成しました。
この場合、辞書は変更を加えるための属性として利用できるようになります。
from collections import UserDict
data = { 'Pune' : 100 ,
'Satara' : 28 ,
'Mumbai' : 31 }
user_dict = UserDict(data)
print (user_dict.data)
|
結果は以下の通りです。
{ 'Pune' : 100 , 'Satara' : 28 , 'Mumbai' : 31 }
|
以下の例では、UserDictをカスタマイズされたクラスで使用する様子を表示しています。
ここでは、UserDictを作成し、カスタマイズしたリスト’mydict’のラッパークラスとして動作するようにしています。
このように、UserDictは、既存の辞書の属性をUserDictに追加するためのラッパークラスとして機能します。
ここでは,Dictionaryに要素の削除を制限するような動作を追加しています.
UserDictは,デフォルトで作成された辞書をラップし,クラスで指定されたカスタマイズされた振る舞いを取り込みます.
例えば、以下の様になります。
from collections import UserDict
class mydata(UserDict):
def pop( self , s = None ):
raise RuntimeError( "Deletion not allowed" )
mydict = mydata({ 'x' : 10 ,
'y' : 20 })
print (mydict)
#Deliting From Dict mydict.pop() |
出力。
{ 'x' : 10 , 'y' : 20 }
Traceback (most recent call last): File "c:/Users/HP/OneDrive/Desktop/demo.py" , line 15 , in <module>
mydict.pop()
File "c:/Users/HP/OneDrive/Desktop/demo.py" , line 7 , in pop
raise RuntimeError( "Deletion not allowed" )
RuntimeError: Deletion not allowed
|
Python の UserList を理解する
UserDictと同様に、UserListもPythonでListをカスタマイズしてクラスに組み込む方法を提供しています。
PythonのListは、似たようなデータを異なるデータ型でまとめて保存します。
UserListはリストをカスタマイズして、それらを属性として使い、ユーザー定義のクラスを作ることを手助けしてくれます。
インスタンスとしてリストを追加したことで、通常のリストデータ構造で保持されるリストがトリガーされます。
構文は以下の様な感じです。
collections.UserList( list )
|
例えば、以下の様になります。
この例では、UserListを利用して、引数として通常のリストを格納しています。
さらに、UserListコレクションと属性をリストとして使用し、そこからカスタマイズされたクラスを作成することができます。
from collections import UserList
lst = [ 1 , 2 , 3 , 4 , 5 ]
user_list = UserList(lst)
print (user_list.data)
|
結果は以下の通りです。
[ 1 , 2 , 3 , 4 , 5 ]
|
以下の例では、UserDictをカスタマイズされたクラスのために使用する様子を示しています。
ここでは、UserListを作成し、カスタマイズされたリスト’mylist’のラッパークラスとして動作するようにしています。
このように、UserListは、既存の辞書の属性をUserListに追加するためのラッパークラスとして機能します。
ここでは、リストに要素の削除を制限する動作を追加し、さらにUserListをラッパー・クラスとしてリストに値を追加/挿入しています。
UserListは、デフォルトで作成された辞書をラップして、クラスで指定されたカスタマイズされた動作を取り込んでいます。
例えば、以下の様になります。
from collections import UserList
class mydata(UserList):
def pop( self , s = None ):
raise RuntimeError( "Deletion not allowed" )
mylist = mydata([ 10 , 20 , 30 ])
mylist.append( 5 )
print ( "Insertion.." )
print (mylist)
mylist.pop() |
結果は以下の通りです。
After Insertion [ 10 , 20 , 30 , 5 ]
Traceback (most recent call last): File "c:/Users/HP/OneDrive/Desktop/demo.py" , line 20 , in <module>
L.pop()
File "c:/Users/HP/OneDrive/Desktop/demo.py" , line 7 , in pop
raise RuntimeError( "Deletion not allowed" )
RuntimeError: Deletion not allowed
|
まとめ
ここまでで、このトピックは終了です。
何か疑問があれば、お気軽にコメントください。
Pythonプログラミングに関連するこのような記事のために、私たちと一緒にご期待ください。