Skip to content

[Python] 把 Dict 字典中的 key 值解開成變數

Last Updated on 2022-11-29 by Clay

今天我在進行深度學習的資料前處理時,發現有個資料集中的標籤名稱特別的多樣,但是為了可讀性,我需要把這些資料分別使用不同的變數名稱來儲存,不能每次調用時都用 key 值來取值(其實是為了和之前在好的固定模版配合)。

上網查了一下,其實有滿多種方法可以把字典dict)中的 key 值解壓成變數的。在這裡就把一些查到的方法記錄一下。


方法一:使用 itemgetter

我還挺喜歡這個方法的,因爲只要一行就可以解決了。

# coding: utf-8
from operator import itemgetter


def main() -> None:
    # Init
    d = {
        "dog": 1,
        "cat": 2,
        "mouse": 3,
        "monkey": 4,
    }

    # Unpack
    dog, cat, mouse, monkey = itemgetter(*list(d.keys()))(d)


if __name__ == "__main__":
    main()

方法二: 使用類別物件來儲存變數

首先我們先建立一個空的類別,然後宣告一個物件,接著就可以使用 setattr() 來給予這個物件變數名稱和變數值。

# coding: utf-8

def main() -> None:
    # Init
    d = {
        "dog": 1,
        "cat": 2,
        "mouse": 3,
        "monkey": 4,
    }

    # Class
    class ParamObject:
        def __init__(self):
            None

    obj = ParamObject()

    # Unpack
    for k, v in d.items():
        setattr(obj, k, v)


if __name__ == "__main__":
    main()

方法三: 使用 SimpleNamespace

當然,我們也可以不需要自己建立空物件,而是使用 SimpleNamespace 來做到。

# coding: utf-8
from types import SimpleNamespace


def main() -> None:
    # Init
    d = {
        "dog": 1,
        "cat": 2,
        "mouse": 3,
        "monkey": 4,
    }

    # Unpack
    obj = SimpleNamespace(**d)


if __name__ == "__main__":
    main()


References


Read More

Tags:

Leave a Reply