Python Hashmap/Dictionary 使用ガイド
送信元:http://www.dotnetperls.com/dictionary-python
内蔵 辞書 リスト セット タプル 2D 配列 バイト クラス コンソール 変換 日付 重複 エラー ファイル 検索 もし ラムダ レン 下 地図 数学 名前付きタプル なし ランダム Re スライス ソート 分割 文字列 ストリップ サブ サブストリング タイプ 一方
辞書 辞書は、要素の検索を最適化します。それは、キーと値を関連付ける。各キーは値を持つ必要があります。辞書は多くのプログラムで使用される。代わりに 1つまたは2つの引数でget()メソッドを使用することができます。これなら迷惑なエラーは発生しません。
引数1です。 get() の最初の引数は、テストするキーです。この引数は必須です。
引数2です。 get() のオプションの第二引数は、デフォルト値です。これは、キーが見つからなかった場合に返されます。
Based on: Python 3
Python program that gets values
plants = {}
# Add three key-value tuples to the dictionary.
plants["radish"] = 2
plants["squash"] = 4
plants["carrot"] = 7
# Get syntax 1.
print(plants["radish"])
# Get syntax 2.
print(plants.get("tuna"))
print(plants.get("tuna", "no tuna found"))
Output
2
None
no tuna found
注意事項 Noneにキーを割り当てることは有効です。そのため、get() は None を返すことができるが、実際にはディクショナリに None 値が存在する。
Python program that causes KeyError
lookup = {"cat": 1, "dog": 2}
# The dictionary has no fish key!
print(lookup["fish"])
Output
Traceback (most recent call last):
File "C:\programs\file.py", line 5, in <module>
print(lookup["fish"])
KeyError: 'fish'
真です。 このキーワードは、キーが辞書のキーと値のタプルの一部として存在する場合、1(真を意味する)を返します。
偽。 キーが存在しない場合、in-keywordは0を返し、falseを示す。これは、if文で有用です。
Python program that uses in
animals = {}
animals["monkey"] = 1
animals["tuna"] = 2
animals["giraffe"] = 4
# Use in.
if "tuna" in animals:
print("Has tuna")
else:
print("No tuna")
# Use in on nonexistent key.
if "elephant" in animals:
print("Has elephant")
else:
print("No elephant")
Output
Has tuna
No elephant
注意 辞書に返される長さは、キーと値を別々に考慮するものではありません。各ペアで長さが1つずつ加算されます。
Python program that uses len on dictionary animals = { "parrot": 2, "fish": 6} # Use len built-in on animals. print("Length:", len(animals)) Output Length: 2
<未定義Python program that uses keys hits = { "home": 125, "sitemap": 27, "about": 43} keys = hits.keys() values = hits.values() print("Keys:") print(keys) print(len(keys)) print("Values:") print(values) print(len(values)) Output Keys: dict_keys(['home', 'about', 'sitemap']) 3 Values: dict_values([125, 43, 27]) 3
次へ 3つのキーと値の組からなる辞書が作成される。この辞書は、ウェブサイトのページのヒットカウントを保存するために使用できる。
ビュー キーと値という名前の2つの変数を導入しています。これらはリストではありませんが、リストに変換することができます。
変換Python program that sorts keys in dictionary # Same as previous program. hits = { "home": 124, "sitemap": 26, "about": 32} # Sort the keys from the dictionary. keys = sorted(keys.keys()) print(keys) Output ['about', 'home', 'sitemap']
<未定義Python that uses the items method rents = { "apartment": 1000, "house": 1300} # Convert to list of tuples. rentItems = rents.items() # Loop and display tuple items. for rentItem in rentItems: print("Place:", rentItem[0]) print("Cost:", rentItem[1]) print("") Output Place: house Cost: 1300 Place: apartment Cost: 1000
しかし キーの並べ替えが必要な場合があります。キーに対して別のメソッド sorted() を呼び出します。
Python error: TypeError: 'tuple' object does not support item assignment
<未定義Python that unpacks items # Create a dictionary. data = { "a": 1, "b": 2, "c": 3} # Loop over items and unpack each item. for k, v in data.items(): # Display key and value. print(k, v) Output a 1 c 3 b 2
ヒント タプルでは、最初の要素のインデックスを0、2番目の要素のインデックスを1としてアドレスを指定することができます。
<スパン プログラムです。 このコードでは、items()リストに対してfor-loopを使用しています。このコードでは、2つの引数を指定してprint()メソッドを使用しています。
Python that loops over dictionaries plants = { "radish": 2, "squash": 4, "carrot": 7} # Loop over dictionary directly. # ... This only accesses keys. for plant in plants: print(plant) Output radish carrot squash
<未定義Python that uses del systems = { "mac": 1, "windows": 5, "linux": 1} # Remove key-value at "windows" key. del systems["windows"] # Display dictionary. print(systems) Output {'mac': 1, 'linux': 1}
Python that uses update
# First dictionary.
pets1 = {
"cat": "feline", "dog": "canine"}
# Second dictionary.
pets2 = {
"dog": "animal", "parakeet": "bird"}
# Update first dictionary with second.
pets1.update(pets2)
# Display both dictionaries.
print(pets1)
print(pets2)
Output
{'parakeet': 'bird', 'dog': 'animal', 'cat': 'feline'}
{'dog': 'animal', 'parakeet': 'bird'}
ここで この例では、キーに "k" という識別子、値に "v" という識別子を使用しています。
Python that uses copy original = { "box": 1, "cat": 2, "apple": 5} # Create copy of dictionary. modified = original.copy() # Change copy only. modified["cat"] = 200 modified["apple"] = 9 # Original is still the same. print(original) print(modified) Output {'box': 1, 'apple': 5, 'cat': 2} {'box': 1, 'apple': 9, 'cat': 200}
<未定義Python that uses fromkeys # A list of keys. keys = ["bird", "plant", "fish"] # Create dictionary from keys. d = dict.fromkeys(keys, 5) # Display. print(d) Output {'plant': 5, 'bird': 5, 'fish': 5}
項目です。 items()メソッドを呼び出すと、タプルのリストを取得することができます。値にアクセスするための余分なハッシュ検索は必要ありません。
これです。 for-loopの中のplant変数がキーです。値は利用できないので、アクセスするにはplants.get(plant)が必要です。
Python that uses dict built-in # Create list of tuple pairs. # ... These are key-value pairs. pairs = [("cat", "meow"), ("dog", "bark"), ("bird", "chirp")] # Convert list to dictionary. lookup = dict(pairs) # Test the dictionary. print(lookup.get("dog")) print(len(lookup)) Output bark 3
<未定義Python that benchmarks get import time # Input dictionary. systems = {"mac": 1, "windows": 5, "linux": 1} # Time 1. print(time.time()) # Get version. i = 0 v = 0 x = 0 while i < 10000000: x = systems.get("windows", -1) if x ! = -1: v = x i += 1 # Time 2. print(time.time()) # In version. i = 0 v = 0 while i < 10000000: if "windows" in systems: v = systems["windows"] i += 1 # Time 3. print(time.time()) Output 1345819697.257 1345819701.155 (get = 3.90 s) 1345819703.453 (in = 2.30 s)
では キーが "windows" のタプルを削除します。辞書を表示すると、2つのキーと値のペアが含まれているだけです。
Python that benchmarks loops import time data = {"michael": 1, "james": 1, "mary": 2, "dale": 5} items = data.items() print(time.time()) # Version 1: get. i = 0 while i < 10000000: v = 0 for key in data: v = data[key] i += 1 print(time.time()) # Version 2: items. i = 0 while i < 10000000: v = 0 for tuple in items: v = tuple[1] i += 1 print(time.time()) Output 1345602749.41 1345602764.29 (version 1 = 14.88 s) 1345602777.68 (version 2 = 13.39 s)
<未定義Python that counts letter frequencies # The first three letters are repeated. letters = "abcabcdefghi" frequencies = {} for c in letters: # If no key exists, get returns the value 0. # ... We then add one to increase the frequency. # ... So we start at 1 and progress to 2 and then 3. frequencies[c] = frequencies.get(c, 0) + 1 for f in frequencies.items(): # Print the tuple pair. print(f) Output ('a', 2) ('c', 2) ('b', 2) ('e', 1) ('d', 1) ('g', 1) ('f', 1) ('i', 1) ('h', 1)
ペット1、ペット2 pets2の辞書では、dogキーの値が異なっており、quot;canine"ではなく、quot;animal"という値になっています。
また pets2 辞書は、新しいキーと値のペアを含んでいます。このペアのキーは "parakeet"、値は "bird"である。
結果 既存の値は、一致する新しい値で置き換えられます。一致する値が存在しない場合は、新しい値が追加されます。
Python that uses update # First dictionary. pets1 = {
<未定義"cat": "feline", "dog": "canine"} # Second dictionary. pets2 = {
<未定義"dog": "animal", "parakeet": "bird"} # Update first dictionary with second. pets1.update(pets2) # Display both dictionaries. print(pets1) print(pets2) Output {'parakeet': 'bird', 'dog': 'animal', 'cat': 'feline'} {'dog': 'animal', 'parakeet': 'bird'}
ここです。 元の辞書のコピーを作成します。そして、そのコピー内の値を変更する。元の辞書は影響を受けない。
Python that uses copy original = {
<未定義"box": 1, "cat": 2, "apple": 5} # Create copy of dictionary. modified = original.copy() # Change copy only. modified["cat"] = 200 modified["apple"] = 9 # Original is still the same. print(original) print(modified) Output {'box': 1, 'apple': 5, 'cat': 2} {'box': 1, 'apple': 9, 'cat': 200}
値です。 fromdict()に第2引数を指定すると、各キーは新しく作成された辞書にその値を持つ。
Python that uses fromkeys
# A list of keys.
keys = ["bird", "plant", "fish"]
# Create dictionary from keys.
d = dict.fromkeys(keys, 5)
# Display.
print(d)
Output
{'plant': 5, 'bird': 5, 'fish': 5}
ヒント これは、ディスクから辞書を読み込む方法として考えられるものです。ペアのリストとして保存(シリアライズ)することができる。
Python that uses dict built-in
# Create list of tuple pairs.
# ... These are key-value pairs.
pairs = [("cat", "meow"), ("dog", "bark"), ("bird", "chirp")]
# Convert list to dictionary.
lookup = dict(pairs)
# Test the dictionary.
print(lookup.get("dog"))
print(len(lookup))
Output
bark
3
そして 計算が終わると、その結果をキャッシュに保存する。キャッシュの中では、引数がキーで、結果が値となる。
そして もしそうなら、キャッシュされたメモ化された戻り値を返します。それ以上の計算をする必要はありません。
注 関数が引数で一度だけ呼ばれる場合、メモ化は何のメリットもありません。
<スパン バージョン1 このバージョンでは、get()の第2引数を使用します。その結果に対してテストを行い、値が見つかれば処理を進めます。
バージョン2。 このバージョンでは、"in" を使用してからルックアップを行います。2倍のルックアップが発生する。しかし、実行される文はより少ない。
Python that benchmarks get
import time
# Input dictionary.
systems = {"mac": 1, "windows": 5, "linux": 1}
# Time 1.
print(time.time())
# Get version.
i = 0
v = 0
x = 0
while i < 10000000:
x = systems.get("windows", -1)
if x ! = -1:
v = x
i += 1
# Time 2.
print(time.time())
# In version.
i = 0
v = 0
while i < 10000000:
if "windows" in systems:
v = systems["windows"]
i += 1
# Time 3.
print(time.time())
Output
1345819697.257
1345819701.155 (get = 3.90 s)
1345819703.453 (in = 2.30 s)
<スパン バージョン1。 このバージョンでは、辞書のキーをwhileループでループしている。その後、値を取得するために追加のルックアップを行う。
バージョン2。 このバージョンでは、代わりにキーと値を含むタプルのリストが使用される。実際には、元の辞書には触れない。
しかし バージョン2も同じ効果で、キーと値にアクセスします。最初にitems()を呼び出すコストは、ここではカウントされていません。
Python that benchmarks loops
import time
data = {"michael": 1, "james": 1, "mary": 2, "dale": 5}
items = data.items()
print(time.time())
# Version 1: get.
i = 0
while i < 10000000:
v = 0
for key in data:
v = data[key]
i += 1
print(time.time())
# Version 2: items.
i = 0
while i < 10000000:
v = 0
for tuple in items:
v = tuple[1]
i += 1
print(time.time())
Output
1345602749.41
1345602764.29 (version 1 = 14.88 s)
1345602777.68 (version 2 = 13.39 s)
だから 最初に文字が見つかったとき、その周波数は0 + 1、次に1 + 1に設定されます。Get() にはデフォルトの戻り値があります。
Python that counts letter frequencies
# The first three letters are repeated.
letters = "abcabcdefghi"
frequencies = {}
for c in letters:
# If no key exists, get returns the value 0.
# ... We then add one to increase the frequency.
# ... So we start at 1 and progress to 2 and then 3.
frequencies[c] = frequencies.get(c, 0) + 1
for f in frequencies.items():
# Print the tuple pair.
print(f)
Output
('a', 2)
('c', 2)
('b', 2)
('e', 1)
('d', 1)
('g', 1)
('f', 1)
('i', 1)
('h', 1)
スピードアップのために <スパン これにより、検索時間を短縮することができます。性能に問題のあるプログラムでは、辞書を使うことが最適化への最初の道となることが多い 性能に問題のあるプログラムでは、辞書を使うことが最適化への最初の道となることが多い
関連
-
python error TypeError: 'bool' object is not subscriptable
-
concat を使用して 2 つのデータフレームを結合する際のエラー
-
ModuleNotFoundError: django という名前のモジュールがない 問題1解決済み
-
AttributeError: モジュール 'tensorflow' には 'enable_eager_execution' という属性がない。
-
AttributeError: 'NoneType' オブジェクトには 'group' という属性がありません。
-
TypeError: 'numpy.ndarray' オブジェクトが呼び出し可能でないエラー処理
-
TypeError: 'builtin_function_or_method' オブジェクトには '__getitem__' という属性がありません。
-
Pythonの学習における問題点
-
jupyter notebookのアンインストールで "The jupyter" distribution was not found 問題が発生する。
-
pythonのエラーです。ValueError: 閉じたファイルへのI/O操作
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
TensorFlowのエラー:ハッシュ化できない型:'numpy.ndarray'エラー
-
'dict' オブジェクトには 'has_key' という属性がありません。
-
python マルチスレッド操作エラー。logger "websocket "のハンドラが見つかりませんでした。
-
ImportError を解決します。pandas をインストールした後に 'pandas' という名前のモジュールがない。
-
gensim: queue という名前のモジュールがありません。
-
virtualenvwrapperのコンフィギュレーションエラー
-
知っておきたいPythonの一行コード50選
-
Pythonクローラー共通ライブラリリクエスト、beautifulsoup、selenium、xpathまとめ
-
idea create python project report Unresolved reference 'xxx' .... の解決策
-
tkinter モジュールを使った Python 倉庫番ゲーム