blog

Python3 基礎 04 辞書とコレクション

辞書はpythonのマッピングコンテナです。 文字列、値、変更不可能なタプルは辞書のキーとして使用できます。 主に、一般的な辞書メソッドを紹介します。 len: 辞書 d に含まれるキーと値のペアの数...

Mar 15, 2020 · 10 min. read
シェア

この記事では、pythonにおける他の2つのコンテナ辞書とコレクションの基本的な使い方を詳しく説明します。

初出はpythonic biological manです。

より良い読書体験のために、ポークしてください:

内容

 
辞書の作成
辞書の使用
 辞書の要素数を返す
 辞書にキーが存在するかどうかを判定する
 キーの値を削除する
 キーの値を変更する
 辞書からキーと値のペアを削除する
 存在しない場合、代わりにデフォルト値を設定する。
 キーの値を削除する
 辞書からすべてのキーと値のペアを削除する
 辞書のすべてのキーを削除する
 辞書のすべてのキーのリストを返す
 辞書からすべての値を削除する
 辞書から値を取り出し、それを削除する。
 辞書からすべてのキーと値のペアを削除する
 浅い辞書コピー
コレクション
コレクションを作成する
コレクションを使う
 2つの集合の連結:記号&または、論理和関数
 2つの集合の差:シンボル - または差分関数を使用する。
 同時に存在しない2つの集合の要素を見つけるには:次の記法を使う。^あるいは、対称的な_difference 
 集合の要素数を求める: len
 メンバーシップ
 コレクションaとコレクションbに共通の要素があるかどうかを判定する: isdisjointを使用する。
 コレクションaがコレクションbに属するか等しいかを決定する。<= ,<記号とissubset関数
 コレクションbがコレクションaを含むかどうかを判断する。>= ,>シンボルとissuperset関数
 コレクションaに要素xを追加する: a.add(x)
 集合aから要素xを削除する: a.pop().remove(x)
 集合aから要素xを削除する: a.pop().discard(x)
 集合aの要素を任意に削除する:a.pop()
 コレクションaを空にする: a.pop().clear()

辞書

辞書はpythonのマッピングコンテナです。

  • キーと値のペアは辞書に格納され、値は一意であるキーを介して呼び出されます;
  • 各キーと値のペアはカンマで区切られ、キーと値はカンマで区切られます;
  • リスト、コレクション、ディクショナリは変更可能であるため、ディクショナリのキーとして使用することはできません;
  • 文字列、値、および変更できないタプルは、辞書のキーとして使用できます。

辞書の作成

#{}直接
In [1]: {"jack":"man", "Rose":"womman"}
Out[1]: {'jack': 'man', 'Rose': 'womman'}
#dict関数の作成
In [3]: pre_dict =[("Jack","man"), ("Rose", "woman")]
In [5]: dict(pre_dict)
Out[5]: {'Jack': 'man', 'Rose': 'woman'}
#zipの助けを借りて作成
In [7]: dict(zip(["Jack","Rose"], ["man","woman"]))
Out[7]: {'Jack': 'man', 'Rose': 'woman'}
In [22]: {('Jack'):"man", "Rose":"womman"}#タプルはキーとして使用できる
Out[22]: {'Jack': 'man', 'Rose': 'womman'}
In [23]: {['Jack']:"man", "Rose":"womman"}# ['Jack']キーとして使用できる
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-23-f446b6afe3c5> in <module>
----> 1 {['Jack']:"man", "Rose":"womman"}
TypeError: unhashable type: 'list' 

辞書の使用

主な焦点は、一般的な辞書メソッドです。

In [2]: print(dir(dict))

['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reducereduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get'、'items'、'keys'、'pop'、'popitem'、'setdefault'、'update'、'values'] です。

  • 辞書の要素数を返します。

len(d)は、辞書dに含まれるキーと値のペアの数を返します。

In [38]: len(a_dict)
Out[38]: 2
  • 辞書にキーが存在するかどうかの判定

dのキーが存在すればTrueを返し、存在しなければFalseを返します。

In [49]: "Jack1" in a_dict
Out[49]: False
In [50]: "Rose" in a_dict
Out[50]: True
  • キーの値の削除

d[key]であり、dにキーが存在しない場合はエラーを報告します。

In [41]: a_dict["Jack"]
Out[41]: 'man'
IIn [42]: a_dic["Lucy"]#Lucyが辞書に存在しない場合はエラーとなる。
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-42-c32a1306fe69> in <module>
----> 1 a_dic["Lucy"]
NameError: name 'a_dic' is not defined
  • キーの値の変更

d[key] = value.

In [43]: a_dict
Out[43]: {'Jack': 'man', 'Rose': 'woman'}
In [44]: a_dict["Jack"] = "man1"
In [45]: a_dict
Out[45]: {'Jack': 'man1', 'Rose': 'woman'}
  • 辞書からキーと値のペアを削除します。

d.pop(key,value)は、キーが存在すれば、辞書dのキーと値のペアを削除し、キーが存在しなければ、指定された値を返し、値が指定されていなければ、エラーを報告します。

In [98]: a_dict
Out[98]: {'Jack': 'man', 'Rose': 'woman'}
In [99]: a_dict.pop("Jack")
Out[99]: 'man'
In : a_dict
Out: {'Rose': 'woman'}
In : a_dict.pop("Jack","Not exit!")
Out: 'Not exit!'
In : a_dict
Out: {'Rose': 'woman'}
  • の代わりにデフォルト値を設定するために、存在しないキーに対応する値を返します。

d.get(key,value)は、dにキーが存在する場合、そのキーに対応する値を返し、dにキーが存在しない場合、指定された値を返します。

In [56]: a_dict
Out[56]: {'Rose': 'woman'}
In [58]: a_dict.get("Rose","haha")#Rose存在する場合は、対応する値が返される 
Out[58]: 'woman'
In [59]: a_dict.get("Lucy","haha")#Lucyが存在しない場合、指定された値 "haha "を返す。”。
Out[59]: 'haha'
In [60]: print(a_dict.get("Lucy"))#Lucy存在しない場合はNoneを返す。
Out[60]: None
  • キーの値の削除

del d[key], 辞書が存在しない key, エラーを報告して終了します。

In [43]: a_dict
Out[43]: {'Jack': 'man', 'Rose': 'woman'}
In [44]: a_dict["Jack"] = "man1"
In [45]: a_dict
Out[45]: {'Jack': 'man1', 'Rose': 'woman'}
In [46]: del a_dict["Jack"]
In [47]: a_dict
Out[47]: {'Rose': 'woman'}
In [48]: del a_dict["Jack1"]#Jack1 というキーが存在しない。
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-48-5948af1fa264> in <module>
----> 1 del a_dict["Jack1"]
KeyError: 'Jack1'
  • 辞書からすべてのキーと値のペアを削除

d.items()

In [74]: a_dict
Out[74]: {'Rose': 'woman', 'Jack': 'man'}
In [75]: a_dict.items()#items辞書のキーと値のペアのビューオブジェクトを、反復をサポートして、リストごとにリストに変換して返す。
Out[75]: dict_items([('Rose', 'woman'), ('Jack', 'man')])
In [76]: list(a_dict.items())
Out[76]: [('Rose', 'woman'), ('Jack', 'man')]
  • 辞書のすべてのキーを取り出します。

d.keys()

In [77]: a_dict.keys()
Out[77]: dict_keys(['Rose', 'Jack'])
In [78]: list(a_dict.keys())
Out[78]: ['Rose', 'Jack']
  • 辞書のすべてのキーのリストを返します。

リスト

In [30]: a_dict
Out[30]: {'Jack': 'man', 'Rose': 'woman'}
In [31]: list(a_dict)
Out[31]: ['Jack', 'Rose']
  • 辞書からすべての値を削除

d.values()

In [79]: a_dict.values()
Out[79]: dict_values(['woman', 'man'])
In [80]: list(a_dict.values())
Out[80]: ['woman', 'man']
  • 辞書内の値を取り出し

d.pop(key)は、keyに対応するキーを返し、キーと値のペアを削除します。

In [81]: a_dict
Out[81]: {'Rose': 'woman', 'Jack': 'man'}
In [82]: a_dict.pop("Rose")
Out[82]: 'woman'
In [83]: a_dict
Out[83]: {'Jack': 'man'}
  • 辞書からすべてのキーと値のペアを削除

d.clear()は、辞書からすべてのキーと値のペアを削除し、空の辞書{}を返します。

In [85]: a_dict
Out[85]: {'Jack': 'man'}
In [86]: a_dict.clear()
In [87]: a_dict
Out[87]: {}
  • 浅い辞書コピー

d.copy()

In [89]: a_dict
Out[89]: {'Jack': 'man'}
In [91]: b_dict = a_dict.copy()
In [92]: b_dict
Out[92]: {'Jack': 'man'}
In [93]: b_dict["Jack"] = "man1"
In [94]: b_dict
Out[94]: {'Jack': 'man1'}
In [95]: a_dict
Out[95]: {'Jack': 'man'}

コレクション

.セットは非順序であり、pythonのコンテナをマッピングします。セット内の要素は順序付けされておらず、キーのみを持つ辞書として解釈することができます(セット内で重複した要素を持つことは不可能です)。:

  • メンバー検出;
  • シーケンスコンテナは重複する項目を削除します;
  • 交差集合、和集合、差集合、対称差集合を求めます。

コレクションの作成

In : {'a', 'b', 'c', 'd', 'e'}# {}ラッピング
Out: {'a', 'b', 'c', 'd', 'e'}
In : set("abcde")#set関数の作成
Out: {'a', 'b', 'c', 'd', 'e'}

**注: **空の{}はコレクションではなく辞書を表します。

コレクションは

2つの集合の交点:&記号または交点関数を使用します。

In : a_set
Out: {'a', 'b', 'c', 'd'}
In : b_set
Out: {'a', 'b', 'c', 'd', 'e'}
In : a_set & b_set # &交差
Out: {'a', 'b', 'c', 'd'}
In : a_set.intersection(b_set)#intersection交差関数
Out: {'a', 'b', 'c', 'd'}
  • つの集合の連結:記号&またはunion関数を使用。

In : a_set | b_set#シンボル|
Out: {'a', 'b', 'c', 'd', 'e'}
In : a_set.union(b_set)#union関数を使う
Out: {'a', 'b', 'c', 'd', 'e'}
  • つの集合の差を求める:符号関数または差関数の使用

In : a_set - b_set#シンボル - を使用する。を返す。_setがaに存在し、b_setに存在しない新しいコレクションは
Out: set()
In : b_set - a_set# _set要素がaに存在し_setに存在しない新しいコレクションは
Out: {'e'}
In : a_set.difference(b_set)#difference関数を使う。を返す。_setがaに存在し、b_setに存在しない新しいコレクションは
Out: set()
In : b_set.difference(a_set)
Out: {'e'}
  • 同時に存在しない2つの集合の要素を求めるには、記号^またはsymmetric_difference関数を使います。

In : a_set ^ b_set
Out: {'e'}
In : a_set.symmetric_difference(b_set)
Out: {'e'}
  • 集合の要素数を求める: len(set)

In : len(a_set)
Out: 4
  • メンバシップ

In : len(a_set)
Out: 4
In : "a" in a_set
Out: True
In : "x" in a_set
Out: False
  • a 集合と b 集合が共通の要素を持つかどうかを判断します。

共通の要素がある場合は False を返し、そうでない場合は True を返します。

In : a_set.isdisjoint(b_set)
Out: False
In : b_set.isdisjoint(a_set)
Out: False
In : a_set.isdisjoint(["x"])
Out: True
  • 集合aが集合bに属するか、または等しいかを判断: <=記号、< />を使用します。

In : a_set.issubset(b_set)#issubset関数を使う,a_setコレクションbはすべてbに属する。_set
Out: True
In : a_set <= b_set#シンボル<=
Out: True
  • bセットがaセットを含むかどうかの判定:>=表記、>表記、issuperset関数の使用

In : b_set.issuperset(a_set)
Out: True
In : b_set >= a_set
Out: True
  • 要素xがaコレクションに追加されます。

xがすでにaに存在する場合は影響なし。

In : a_set
Out: {'a', 'b', 'c', 'd'}
In : a_set.add("a")#a存在しても効果はない
In : a_set.add("x")# 
In : a_set
Out: {'a', 'b', 'c', 'd', 'x'}
  • 集合aから要素xを削除: a.remove(x)

a に x が存在しない場合はエラー。

In : a_set
Out: {'a', 'b', 'c', 'd', 'x'}
In : a_set.remove("y")#yコレクションaが存在しない_set 
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-176-9b11cfe9e098> in <module>
----> 1 a_set.remove("y")
KeyError: 'y'
In : a_set.remove("x")
In : a_set
Out: {'a', 'b', 'c', 'd'}
  • 集合aから要素xを取り除く: a.discard(x)

要素 x が集合 a に存在する場合、その要素を削除します。

In : a_set
Out: {'a', 'b', 'c', 'd'}
In : a_set.discard("x")#a_set要素xが存在しない。removeとは異なる。
In : a_set.discard("d")
In : a_set
Out: {'a', 'b', 'c'}
  • 集合aの要素を任意に削除:a.pop()

コレクションが空の場合はエラーが報告されます。

In : a_set
Out: {'a', 'b', 'c'}
In : a_set.pop()
Out: 'a'
In : a_set.pop()
Out: 'c'
In : a_set.pop()
Out: 'b'
In : a_set.pop()
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-187-f734613b9ec5> in <module>
----> 1 a_set.pop()
KeyError: 'pop from an empty set'
In : a_set#セットはすでに空である
Out: set()
In : a_set
Out: {'a', 'b', 'c', 'd'}
In : a_set.clear()
In : a_set
Out: set()

公共の番号に従って、迷うことなく仕事ができる方歓迎:

Read next

mysqlでupdate sqlはどのように実行されるか?

更新操作のたびにディスクに書き込む必要があり、ディスクが対応するレコードを見つけて更新しなければならないとすると、全体のIOコスト、検索コストが非常に高くなります。この問題を解決するために、MySQLの設計者は、WALと呼ばれる技術を使用し、WALの完全な名前はWrite-Ahead Loggingであり、重要なポイントは、最初にログを書き込むことであり、その後、ディスクを書き込みます。より多くのレコードが必要な場合...

Mar 15, 2020 · 4 min read