裝載自:http://smilejay.com/2014/10/convert_string_to_dict_python/python
我將數據庫鏈接相關的一些用戶名/密碼/host/port等各類東西做爲一個string保存在了數據庫中,我要用MySQLdb檢查這些數據庫鏈接信息是夠能正常使用,須要將數據庫信息中的用戶名/密碼/host/port等信息做爲參數傳給MySQLdb.Connect()。者就須要將'{「host」:」192.168.11.22″, 「port」:3306, 「user」:」abc」,」passwd」:」123″, 「db」:」mydb」, 「connect_timeout」:10}’」這樣的string轉化爲dict。mysql
在python中,將string轉爲一個dict,我所知有以下3中方法:
1. ast.literal_eval() 這是我經常使用的,依賴python2.6以上,據介紹時說比直接eval更安全一些,我沒細究哈。
2. eval() 在string內容比較可控/安全的前提下,eval是不錯的方法。
3. json.loads() 用json提供的loads方法是不錯的,不過key/value中的string被轉化爲了unicode哦。git
看實例代碼:https://github.com/smilejay/python/blob/master/py2014/string2dict.pygithub
Created on Oct 14, 2014 @author: Jay <smile665@gmail.com> ''' import MySQLdb import ast import json def my_run(): try: s = '{"host":"192.168.11.22", "port":3306, "user":"abc",\ "passwd":"123", "db":"mydb", "connect_timeout":10}' d = ast.literal_eval(s) print type(d) print d d1 = eval(s) print type(d1) print d1 d2 = json.loads(s) print type(d2) print d2 MySQLdb.Connect(host=d['host'], port=d['port'], user=d['user'], passwd=d['passwd'], db=d['db'], connect_timeout=d['connect_timeout']) print 'right' except Exception, e: print 'wrong %s' % e if __name__ == '__main__': my_run()
參考資料:
http://stackoverflow.com/questions/988228/converting-a-string-to-dictionary
http://stackoverflow.com/questions/15596121/converting-a-string-into-dictionary-pythonsql