メインコンテンツにスキップ
モジュール 6 · レッスン 2 / 4コース内の 22/36~10 min
モジュールのレッスン (2/4)

辞書と集合内包表記

リスト内包表記に使用されるのと同じ構文が構築にも機能します。 dict と set の値 - 括弧を変更するだけです。

辞書の理解

構文: {key: value for element in iterable}。

Python
quadrati = {n: n * n for n in range(5)}
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

よくあるパターン: タプルのリストを辞書に変換します。

Python
coppie = [("a", 1), ("b", 2), ("c", 3)]
d = {k: v for k, v in coppie}
# {'a': 1, 'b': 2, 'c': 3}
# (equivalente a dict(coppie) in questo caso)

辞書のキーと値を交換します。

Python
originale = {"a": 1, "b": 2, "c": 3}
invertito = {v: k for k, v in originale.items()}
# {1: 'a', 2: 'b', 3: 'c'}

辞書をフィルタリングします。

Python
prezzi = {"mela": 1.2, "pera": 1.5, "kiwi": 2.5, "ananas": 4.0}
economici = {k: v for k, v in prezzi.items() if v < 2.0}
# {'mela': 1.2, 'pera': 1.5}

集合内包表記

構文: {expression for element in iterable}。リストと同じ 理解可能ですが、中括弧が付いています。

Python
parole = ["ciao", "mondo", "ciao", "python"]
uniche = {p.upper() for p in parole}
# {'CIAO', 'MONDO', 'PYTHON'}

名前のリストからの一意のイニシャル:

Python
nomi = ["Ada", "Linus", "Grace", "Alan", "Guido"]
iniziali = {n[0] for n in nomi}
# {'A', 'L', 'G'}

フィルター + 変換

リスト内包表記と同様に、末尾の if フィルターは次のようになります。

Python
{n: n * n for n in range(10) if n % 2 == 0}
# {0: 0, 2: 4, 4: 16, 6: 36, 8: 64}

キーと値を交換するための辞書内包表記

辞書を反転する (値が一意であると仮定して、キーと値を交換する) 非常に一般的なパターンは次のとおりです。

Python
orig_dict = {'a': 1, 'b': 2}
inv_dict = {value: key for key, value in orig_dict.items()}
# result: {1: 'a', 2: 'b'}

試してみてください

運動#python.m6.l2.e1
試行回数: 0読み込み中…

`words = ['mela', 'pera', 'kiwi', 'banana']` とすると、`lengths` を dict {word: len(word)} として構築します。 「長さ」を評価します。

エディターを読み込み中…
ヒントを表示

{p: len(p) for p の単語}

3 回の試行後に解決策が利用可能になります

復習演習

運動#python.m6.l2.e2
試行回数: 0読み込み中…

`nums = [1, 2, 2, 3, 4, 4, 5]` とすると、正方形の SET として `unique_squares` を構築します。 `unique_squares`を評価します。

エディターを読み込み中…
ヒントを表示

「:」のない中括弧 = セット内包表記。

3 回の試行後に解決策が利用可能になります

追加の課題

運動#python.m6.l2.e3
試行回数: 0読み込み中…

Given the list of strings `names = ["Alice", "Bob"]`, use a dict comprehension to create a dictionary that maps each name to its length. Store the dictionary in `name_lengths` and evaluate it.

エディターを読み込み中…
ヒントを表示

構文は {name: len(name) for name in names} です。

3 回の試行後に解決策が利用可能になります