【3】データ構造の辞書、集合

28113 ワード

辞書辞書はPythonの最も重要なデータ構造かもしれません.より一般的な名前は、ハッシュマッピングまたは関連配列です.キー値ペアのサイズ可変集合であり、キーと値はPythonオブジェクトです.辞書を作成する方法の1つは、カッコを使用してキーと値をコロンで分割することです.
empty_dict={
     }
d1={
     'a':'some value','b':[1,2,3,4]}
d1
{
     'a': 'some value', 'b': [1, 2, 3, 4]}

リストやメタグループの要素にアクセスするように、辞書の要素にアクセス、挿入、または設定できます.
d1[7]='an integer'
d1
{
     'a': 'some value', 'b': [1, 2, 3, 4], 7: 'an integer'}
d1['b']
[1, 2, 3, 4]

リストとメタグループに値が含まれているかどうかを確認する方法を使用して、辞書にキーが含まれているかどうかを確認できます.
'b' in d1
True

delキーまたはpopメソッド(値を返す同僚削除キー)を使用して値を削除できます.
d1[5]='some value'
d1
{
     'a': 'some value', 'b': [1, 2, 3, 4], 7: 'an integer', 5: 'some value'}
d1['dummy']='another value'
d1
{
     'a': 'some value',
 'b': [1, 2, 3, 4],
 7: 'an integer',
 5: 'some value',
 'dummy': 'another value'}
del d1[5]
d1
{
     'a': 'some value',
 'b': [1, 2, 3, 4],
 7: 'an integer',
 'dummy': 'another value'}
ret=d1.pop('dummy')
ret
'another value'
d1
{
     'a': 'some value', 'b': [1, 2, 3, 4], 7: 'an integer'}

keysとvaluesは辞書のキーと値の反復器メソッドです.キー値ペアには順序がありませんが、この2つの方法は同じ順序でキーと値を出力することができます.
list(d1.keys())
['a', 'b', 7]
list(d1.values())
['some value', [1, 2, 3, 4], 'an integer']

updateメソッドで1つの辞書を別の辞書に融合させ、
d1.update({
     'b':'foo','c':12})
d1
{
     'a': 'some value', 'b': 'foo', 7: 'an integer', 'c': 12}

updateメソッドは辞書をその場で変更するので、updateに渡されるキーの古い値は捨てられます.
シーケンスで辞書を作成する場合は、通常、2つのシーケンスグループを辞書に合成したい場合があります.次は書き方です.
mapping={
     }
for key,value in zip(key_list,value_list):
    mapping[key]=value

辞書は本質的に2メタグループの集合であるため、dictは2メタグループのリストを受け入れることができる.
mapping=dict(zip(range(5),reversed(range(5))))
mapping
{
     0: 4, 1: 3, 2: 2, 3: 1, 4: 0}

集合集合は無秩序で繰り返し不可能な要素集合である.辞書として使えますが、キーだけが値しません.セットを作成するには、set関数またはカッコset文を使用します.
set([2,2,2,1,3,3])
{
     1, 2, 3}
{
     2,2,2,1,3,3}
{
     1, 2, 3}

集合は、結合、交差、差分、対称差などの数学的集合演算をサポートし、2つの例の集合を考慮します.
a={
     1,2,3,4,5}
b={
     3,4,5,6,7,8}

マージは、unionメソッドまたは|演算子を使用して、2つのセットの重複しない要素を取得します.
a.union(b)
{
     1, 2, 3, 4, 5, 6, 7, 8}

交差する要素は2つのセットに含まれ、intersectionまたは&演算子を使用できます.
a.intersection(b)
{
     3, 4, 5}
a&b
{
     3, 4, 5}

すべての論理集合操作には、集合の内容を直接結果で置き換えることができる別の方法があります.大きな集合に対しては効率が高く、
c=a.copy()
c
{
     1, 2, 3, 4, 5}
b
{
     3, 4, 5, 6, 7, 8}
c|=b
c
{
     1, 2, 3, 4, 5, 6, 7, 8}

辞書と同様に、集合要素は通常可変ではありません.類似リストの要素を取得するには、メタグループに変換する必要があります.
my_data=[1,2,3,4]
my_set={
     tuple(my_data)}
my_set
{
     (1, 2, 3, 4)}

また、あるコレクションが別のコレクションのサブセットまたは親セットであるかどうかを検出することもできます.
a_set={
     1,2,3,4,5}
{
     1,2,3}.issubset(a_set)
True
a_set.issuperset({
     1,2,3})
True

集合の内容が同じで、集合は対等で、
{
     1,2,3}=={
     3,2,1}
True

リスト、集合、辞書導出式リスト導出式はPythonの最も人気のある特性の一つである.これにより、ユーザーは1つの集合から要素をフィルタリングし、リストを形成することができ、パラメータを渡す過程で要素を変更することもでき、filter条件は無視でき、式だけを残しておくことができます.たとえば、文字列のリストを指定すると、2以下の文字列をフィルタして大文字に変換できます.
strings=['a','as','bat','car','dove','python']
[x.upper() for x in strings if len(x)>2]
['BAT', 'CAR', 'DOVE', 'PYTHON']

集合や辞書のプッシュも便利で、コードの読み書きも簡単です.前の文字列リストを見ると、文字列の長さだけがほしいなら、集合導出式の方法でとても便利です.
unique_lengths={
     len(x) for x in strings}
unique_lengths
{
     1, 2, 3, 4, 6}

map関数はさらに簡略化でき、
set(map(len,strings))
{
     1, 2, 3, 4, 6}