簡體   English   中英

將字符串轉換為 dict 並返回的優雅方法

[英]Elegant way to convert string to dict and back

是否有一種優雅的單線將這種類型的字符串轉換為 dict? 我現在用谷歌搜索了一個小時,但是沒有幾個分割字符串的循環,我無法讓它工作。

Input  = "2:9, 6:90, 7:60"
Output = {'2': 9, '6': 90, '7': 60}

我還需要從字典到字符串的反向操作。

性能方面最有效的將是正常for循環:

my_string = "2:9, 6:90, 7:60"
my_dict = {}
for s in my_string.split(', '):
     k, v = s.split(":")
     my_dict[k] = int(v)

其中my_dict將包含:

>>> my_dict
{'2': 9, '7': 60, '6': 90}

要取回相同的字符串,您可以在dict.items() ) 上執行.join() ) 為:

>>> ", ".join("{}:{}".format(k, v) for k, v in my_dict.items())
'2:9, 7:60, 6:90'

或者,您也可以將 dict 類型轉換為字符串並對其進行一些格式化,例如:

>>> str(my_dict)[1:-1].replace(": ", ":").replace("'", "")
'2:9, 7:60, 6:90'

您可以使用ast.literal_eval並將括號放在字符串的每一端,盡管您的鍵將是整數而不是字符串。

from ast import literal_eval

Input  = "2:9, 6:90, 7:60"

Output = literal_eval(f"{{{input}}}")

{2: 9, 6: 90, 7: 60}

要將 output 修復為字符串鍵,只需手動轉換它們

Output = dict(zip(map(str, Output), Output.values()))

{'2': 9, '7': 60, '6': 90}

不導入任何庫的情況下,您需要使用str.split

Output = dict(s.split(':') for s in Input.split(', '))

{'2': '9', '6': '90', '7': '60'}

雖然現在你的值是字符串,所以你需要修復它。

Output = dict(zip(Output, map(int, Output.values())))

{'2': 9, '7': 60, '6': 90}

好吧,不問問題,如果你想要一個使鍵成為字符串而值成為 int 的單行:

dict([[j[0].strip(), int(j[1])] for j in [i.split(':') for i in Input.split(',')]])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM