Python 辞書のリストの使用方法

php中世界最好的语言
リリース: 2018-04-09 17:54:17
オリジナル
2191 人が閲覧しました

今回は、Python辞書リストの使い方と、Python辞書リストを使用する際の注意点について、実際の事例を紹介しますので、見ていきましょう。

1. キーが存在するかどうかを確認するには、in キーワードを使用します。

Python の Zen には開発哲学があります。

それを行う明白な方法は 1 つだけである必要があります。

それを見つけてください。 1 つ、できれば唯一の明白な解決策です。 Python2 では、 has_key メソッドを使用して、キーが辞書に存在するかどうかを確認できます。もう 1 つの方法は、 in キーワードを使用することです。ただし、in の方が処理が速いため、後者の使用を強くお勧めします。もう 1 つの理由は、Python3 で has_key メソッドが削除されたためです。コードの py2 と py3 の両方のバージョンと互換性を持たせたい場合は、in を使用するのが最適です。選択。

bad
d = {'name': 'python'}
if d.has_key('name'):
  pass
good
if 'name' in d:
  pass
ログイン後にコピー

2. get を使用して辞書内の値を取得します

辞書内の値を取得する場合、簡単な方法は d[x] を使用して要素にアクセスすることですが、この状況はキーがアクセスされたときに発生します。もちろん、キーを取得する前に in 操作を使用してキーが辞書にあるかどうかを確認することはできますが、このメソッドは Python の Zen で述べられていることに従っていません。シンプルは複雑よりも優れています。

フラットはネストよりも優れています。


優れたコードはシンプルで理解しやすいものである必要があり、フラットなコード構造は読みやすくなります。 if...else

bad
d = {'name': 'python'}
if 'name' in d:
  print(d['hello'])
else:
  print('default')
good
print(d.get("name", "default"))
ログイン後にコピー

3 の代わりに get メソッドを使用できます。辞書に存在しないキーのデフォルト値を設定するには setdefault を使用します

data = [
    ("animal", "bear"),
    ("animal", "duck"),
    ("plant", "cactus"),
    ("vehicle", "speed boat"),
    ("vehicle", "school bus")
  ]
ログイン後にコピー
分類統計を行うときは、同じタイプのデータを辞書に追加する上記のコードのような特定のタイプでは、同じタイプのものをリストの形式で再組み立てして、新しい辞書を取得します
groups = {}
>>> 
{'plant': ['cactus'], 
 'animal': ['bear', 'duck'], 
 'vehicle': ['speed boat', 'school bus']}
ログイン後にコピー
一般的な方法は、最初にキーがすでにあるかどうかを判断することです存在しない場合は、最初にリストを使用します

オブジェクトを初期化してから、後続の操作を実行します。より良い方法は、辞書で setdefault メソッドを使用することです。

bad
for (key, value) in data:
  if key in groups:
    groups[key].append(value)
  else:
    groups[key] = [value]
good
groups = {}
for (key, value) in data:
  groups.setdefault(key, []).append(value)
ログイン後にコピー

setdefault の機能は次のとおりです: キーが辞書に存在する場合は、対応する値が直接返されます。これは get メソッドと同等です

キーが辞書に存在しない場合は、2 番目のパラメータが返されます。 setdefault はキーの値として使用され、値を返します。

4. defaultdict を使用して辞書オブジェクトを初期化します

x が存在しないときに d[x] がエラーを報告したくない場合は、要素を取得するときに get メソッドを使用する以外に、次の方法もあります。コレクションモジュールでdefaultdictを使用します。実際、defaultdictはdictのサブクラスです。

from collections import defaultdict
groups = defaultdict(list)
for (key, value) in data:
  groups[key].append(value)
ログイン後にコピー
key が辞書に存在しない場合、list 関数が呼び出され、d[key] に割り当てる空のリストが返されます。このようにして、d[k] を呼び出してレポートすることを心配する必要はありません。エラー。

5. fromkeysを使用してリストを辞書に変換します

keys = {'a', 'e', 'i', 'o', 'u' }
value = []
d = dict.fromkeys(keys, value)
print(d)
>>>
{'i': [], 'u': [], 'e': [], 
 'a': [], 'o': []}
ログイン後にコピー

6. 辞書を使用してswitch

...caseステートメントを実装します

Pythonにはswitch...caseステートメントはありません。この問題は、Python の父である Uncle Turtle によって解決されました。これは、この文法が過去にも現在にも存在せず、将来にも存在しないことを意味します。 Python の簡潔な構文は if ... elif を使用して実装できるためです。分岐判定が多すぎる場合には、辞書を代わりに使用することもできます。

if arg == 0:
  return 'zero'
elif arg == 1:
  return 'one'
elif arg == 2:
  return "two"
else:
  return "nothing"
good
data = {
  0: "zero",
  1: "one",
  2: "two",
}
data.get(arg, "nothing")
ログイン後にコピー

7. iteritems を使用して辞書内の要素を反復処理します

Python には、items メソッドを使用する方法がいくつかあります:

d = {
  0: "zero",
  1: "one",
  2: "two",
}
for k, v in d.items():
  print(k, v)
ログイン後にコピー
items メソッドは (key, value) 合成 このメソッドの欠点は、非常に大きな辞書を反復する場合、リスト オブジェクトがすべての要素を一度にメモリにロードするため、メモリが瞬時に 2 倍になることです。より良い方法は iteritems

for k, v in d.iteritems():
  print(k, v)
ログイン後にコピー

を使用することです。 iteritems が返す Iterator オブジェクトには遅延読み込み特性があり、実際に必要な場合にのみ値を生成します。このメソッドは、反復プロセス中にこれらのデータを読み込むために追加のメモリを必要としません。 Python3 では、Python2 の iteritems に相当する items メソッドのみが存在し、メソッド名 iteritems が削除されていることに注意してください。

8. 辞書導出を使用します

推导式是个绝妙的东西,列表推导式一出,map、filter等函数黯然失色,自 Python2.7以后的版本,此特性扩展到了字典和集合身上,构建字典对象无需调用 dict 方法。

bad
numbers = [1,2,3]
d = dict([(number,number*2) for number in numbers])
good
numbers = [1, 2, 3]
d = {number: number * 2 for number in numbers}
ログイン後にコピー

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

Python中怎样把矩阵转换为列表

Python连接MySQL的方式总结

以上がPython 辞書のリストの使用方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート