Skip to content

[Python] 使用 format_map() 將變數值填充於字串中

Last Updated on 2023-06-27 by Clay

前陣子閱讀了不少 LLaMA 的各種 LoRA 模型訓練(雖然已經大概是兩個月前…),在閱讀各家程式碼的時候,發現在程式碼中設定給予模型的 prompt 時,若需要根據不同的資料調整內容,使用 format_map() 的格式看起來最為乾淨。

所以今天這篇文章就來簡單記錄一下 format_map() 函式吧!


範例程式碼

簡單來說,format_map() 可以把原先字串留空變數的部分,使用填入對應的 key 值組成新的字串。

例如以下的範例程式碼,原始的字串留空了 {Name} 和 {Age} 兩個欄位。假設我們有很多的資料,我們就可以使用 for 迴圈取得新組成的資料。

# coding: utf-8


def main() -> None:
    data = [
        {"Name": "Clay", "Age": 29},
        {"Name": "Atlas", "Age": 27},
        {"Name": "Wendy", "Age": 20},
    ]

    original_text = "My name is {Name} and I am {Age} years old."

    for item in data:
        print(original_text.format_map(item))


if __name__ == "__main__":
    main()


Output:

My name is Clay and I am 29 years old.
My name is Atlas and I am 27 years old.
My name is Wendy and I am 20 years old.


如果不知道這個語法的話,我們也只能將其寫成:

for item in data:
    print("My name is {} and I am {} years old.".format(item["Name"], item["Age"]))
for item in data:
    print(f"My name is {item['Name']} and I am {item['Age']} years old.")
for item in data:
    print(f"My name is " + item["Name"] + " and I am " + str(item["Age"]) + " years old.")


第一種在變數很多的時候看起來會很亂。
第二種算是還不錯、可讀性也很好的寫法;就是在遇上需要條件控制切換不同的變數填入時不像 format_map() 來得方便,可能需要更動到原始資料。
第三種算是可讀性最差的了。

以上,是一些組合字串的 Python 小技巧。


References


Read More

Tags:

Leave a Reply