1
0

dict の特性(python)

Last updated at Posted at 2024-05-12

Python3.7 以降では dict の順序(追加された順番)が保証されるようになりました。

当たり前の動作に思えますが、Python のバージョンによっては当たり前ではないため確認する必要があり、実際に以下の動作になることが確認できました。

next, iter

test = {"key1":"value2", "key2":"value1"}
test_iter = iter(test)
print(next(test_iter))
print(next(test_iter))

# 実行結果
key1
key2
test = {"key1":"value2", "key2":"value1"}
test_iter2 = iter(test.values())
print(next(test_iter2))
print(next(test_iter2))

# 実行結果
value2
value1

上記結果より、next, iter を使うことで、dict に追加した順の index を取得することが可能になります。

mapping

Python3.10 以降 mapping が追加されたようです。
一言で言ってしまえば、values や key から元の dict に戻す感じですが、type が types.MappingProxyType になるようです。

具体的には以下の動作になります。

test = {"key1":"value2", "key2":"value1"}
print(test.values().mapping)
print(test.keys().mapping)

# 実行結果
{'key1': 'value2', 'key2': 'value1'}
{'key1': 'value2', 'key2': 'value1'}

異なる type になるようなので、以下になるようです。

print(type(test) == type(test.keys().mapping), type(test) ,type(test.keys().mapping))
print(test == test.values().mapping)

# 実行結果
False <class 'dict'> <class 'mappingproxy'>
True

type が異なっても、== は True になるところは興味深いです。

mapping と .values() は繰り返し使えそうなので試すと、繰り返し使えるようです。

print(test.values().mapping.values().mapping)

# 実行結果
{'key1': 'value2', 'key2': 'value1'}
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0