python_dict型と_swiftでのDictionary_01

 

pythonにおいてのdictというのは


swiftでの Dictionary型に相当するのでしょうか?


その内部の構造は


キーに割り当てられる型は、おなじ型で統一しなければならないのでしょうか?



Python の `dict` は 

Swift の `Dictionary` 型にほぼ相当します。


ただし、Python の `dict` は型に関してより柔軟で、

以下のような特徴があります。



### 1. 内部構造の基本的な違い


- **Python の `dict`**:


  - キー: ハッシュ可能なオブジェクト

(例えば、`str`、`int`、`tuple` など)が使えます。

同じ `dict` 内で異なる型のキーを混在させることが可能です。



  - 値: 任意の型を使用可能です。

同じ `dict` 内で異なる型の値を混在させることが可能です。



  ```python

  

  my_dict = {

  

      "key1": 100,

      42: "value",

      (1, 2): [3, 4]

  

  }

  

  ```


- **Swift の `Dictionary`**:


  - キー: `Hashable` プロトコルに準拠する型を使用できます。

  

  - 型の制約: `Dictionary<Key, Value>` のジェネリクス構造により、

キーと値の型は統一される必要があります。

ただし、値の型として `Any` を使うことで、異なる型を格納することも可能です。


  ```swift

  

  let myDictionary: [AnyHashable: Any] = [

  

      "key1": 100,

      42: "value",

      (1, 2): [3, 4]

  

  ]

  

  ```


### 2. キーに割り当てられる型


Python では、キーに割り当てる型は統一する必要はありませんが、

すべてのキーはハッシュ可能(`hashable`)である必要があります。

例えば、リストや辞書自体をキーにすることはできません。


```python


my_dict = {


    "key1": 123,

    456: "value",

}


print(my_dict["key1"])  # 123

print(my_dict[456])     # "value"

```


一方で、Swift の `Dictionary` はキーと値の型を統一する設計が基本ですが、

`AnyHashable` を使用することで異なる型のキーを持つ辞書も構築できます。



```swift


let dictionary: [AnyHashable: String] = [


    "key1": "value1",

    123: "value2"

]


print(dictionary["key1"]!)  // "value1"

print(dictionary[123]!)     // "value2"


```


### 3. 実際の違いまとめ


**Python `dict`** 

 

キーも値も型の統一不要

ハッシュ可能な型

制約なし

ハッシュ可能性の要件 あり



**Swift `Dictionary`**


キーと値に型を指定する必要がある 

`Hashable` プロトコル準拠の型

指定された型(または `Any`)

ハッシュ可能性の要件 あり



Python の `dict` の方が柔軟性が高いですが、

その分型のミスが起きる可能性もあるので、

必要に応じて型チェックを活用すると良いでしょう。


Swift の `Dictionary` は型が明示されるため、

コンパイル時に型の整合性が保証されます。


コメント