我有一個字符串如何把字符串轉換成一個字典在Python
"{a:'b', c:'d',e:''}"
什麼是最便捷的方式,使其向字典
{'a':'b', 'c':'d', 'e':''}
爲什麼會產生這麼多的人這是重複的this?在發佈之前,我已經完成了作業。在認爲別人犯了錯誤之前,請重新考慮你是否錯了。謝謝!
我有一個字符串如何把字符串轉換成一個字典在Python
"{a:'b', c:'d',e:''}"
什麼是最便捷的方式,使其向字典
{'a':'b', 'c':'d', 'e':''}
爲什麼會產生這麼多的人這是重複的this?在發佈之前,我已經完成了作業。在認爲別人犯了錯誤之前,請重新考慮你是否錯了。謝謝!
取決於你解析什麼的複雜性,這可能是工作:
s = "{a:'b', c:'d',e:''}"
d = dict([
(x.split(':')[0].strip(), x.split(':')[1].strip("' "))
for x in s.strip("{}").split(',')
])
哇,很酷的答案男人:) – RoadRunner
謝謝:) Python很酷。 – Will
是的,是的,仍然有困難做這樣的長時間表達,雖然,尼斯工作的人:) – RoadRunner
你也可以做這種方式,即使它不漂亮。它確實取決於你的字符串的結構。是否還有其他類型的字符串字典需要評估?
string = "{a:'b', c:'d',e:''}"[1:-1].split(",")
d = {}
for s in string:
s = s.strip()
key, value = s[0], s[-2]
if value.isalpha():
d[key] = value
else:
d[key] = ''
print(d)
輸出:
{'e': '', 'a': 'b', 'c': 'd'}
警告根據需要,如果你有一個鍵映射到你的中間空字符串這種方法是行不通的「字典」。我不會刪除這個答案,因爲我認爲這種方法仍然可以挽救。
這可能比Will的答案稍微普遍一些,但它仍然要依賴於你正在解析的確切結構。如果你的鍵值對由字母數字組成,你應該沒問題。
In [3]: import re
In [4]: import itertools
In [5]: my_string = "{a:'b', c:'d',e:''}"
In [6]: temp = re.findall(r"\w", my_string)
In [7]: temp = itertools.zip_longest(temp[0::2], temp[1::2], fillvalue = "")
In [8]: dict(temp)
Out[8]: {'a': 'b', 'c': 'd', 'e': ''}
如果你想知道什麼是與拉鍊功能發生的事情,看到這些問題:
Collect every pair of elements from a list into tuples in Python
我以前itertools.zip_longest
所以你可以使用的填充值,通過啓發:
嗯,第二個想法,這將無法按需要工作,如果你有一個關鍵映射到你的「字典。」那麼,它可能仍然有用。 –
爲什麼downvote? –
看起來像某人低估了每個人。我投給你。 – Harrison
你可以通過使用json包實現這個;
import json
s = '{"a":"b", "c":"d","e":"f"}'
my_dict = json.loads(s)
print type(my_dict)
不適用於問題 –
如果這是從可信源(不使用此爲一般用戶的輸入,爲eval is not secure;但話又說回來,如果你從潛在惡意用戶獲取輸入您應使用JSON格式改爲json
module),您可以使用eval
。
source = """{e: '', a: 'b', c: 'd'}"""
class identdict(dict):
def __missing__(self, key):
return key
d = eval(source, identdict())
print(d)
打印
{'a': 'b', 'c': 'd', 'e': ''}
這是如何工作的是我們創建了一個新的字典子類identdict
定義魔術方法__missing__
。該方法被稱爲查找字典中缺少的鍵。在這種情況下,我們只是返回鍵,所以字典將鍵映射到自己。然後使用identdict
實例作爲globals
參數,source
爲eval
。 eval
將查找來自globals
映射的變量值;因爲它是一個identdict
,所以訪問的每個變量的值現在很方便,現在是變量的名稱。
適用於更復雜的字符串作爲值,以及任何合適的Python文字語法。
中的字符串尼斯。雖然我的內容只是字母數字,但很好學習新的東西。由於我已經接受了其他答案,我只能爲你勝利。欣賞。 – Harrison
@哈里森它總是可以爲你改變接受的答案 –
@AnttiHaapala偉大的小黑客!但是這個工作到底如何?我不是很瞭解這是如何通過'NameError',不應該在字典甚至處理一個缺失的值之前被提出?它是如何返回一個字符串?我在'__missing__'方法中添加了'print(type(key))',並且如果我做了'id [1]'這樣的'id''是'identdict',並且如果我做了'
import re
str="{a:'b', c:'d',e:''}"
dict([i.replace("'","").split(":") for i in re.findall(r"(\w+\:'.*?')",str)])
這樣的字符串的來源是什麼? –
@KevinGuan,它不同。 'eval'將爲'a'工作:'b''但不是'a:'b'' – Harrison
@ juanpa.arrivillaga:我猜這是一個Javascript對象字面值(_not_ JSON,它需要屬性名稱被引用)。 – ShadowRanger