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
- https://stackoverflow.com/questions/11156739/divide-a-dictionary-into-variables
- https://stackoverflow.com/questions/18090672/convert-dictionary-entries-into-variables