2014-05-01 2 views
-3

나는 pairSeparator와 keyValueSeparator를 사용하여 문자열을 사전으로 변환하려고합니다. 에게 나는이 정의하는 방법 :사전 파이썬으로 문자열을 변환

s = 'potatoes:2.67,sugar:1.98,cereal:5.99,crisps:1.09'  
D = stringToDictionary(s, ',', ':') 
print(D) 
{'sugar': 1.98, 'cereal': 5.99, 'potatoes': 2.67, 'crisps': 1.09} 
+0

중복 https://stackoverflow.com/questions/988228/converting-a-string-to-dictionary – KBN

+2

@xFortyFourx 그러나 여기 string은 dict의 문자열 표현이 아닙니다. –

+0

json lib를 사용하십시오 – user3570335

답변

1

분할 :

def stringToDictionary(s, pairSeparator, keyValueSeparator): 

.... 
.... 

return D 

나는이 결과를 원한다!

아주 쉽게 나누기를 사용하여 해결할 수 있습니다. 당신은 몇 가지 오류 검사를 추가 할 수 있지만, 기본적으로 같은 것을 할 수 있습니다

def stringToDictionary(s, pairSeparator, keyValueSeparator): 
    pairs = s.split(pairSeparator) 
    return dict(pair.split(keyValueSeparator) for pair in pairs) 

나는 당신의 예상 출력은 정수로 값을 변환하는 것을 알 수 있습니다. 이 함수를 일반적으로 유지하려면 stringToDictionary에 변환기 함수를 전달하거나 단순히 값을 나중에 변환하는 것이 좋습니다.

+0

정말 고맙습니다. 나는 똑같은 일을하고 있었지만 마지막 문장에서 잘못 생각했습니다! 도와 주셔서 정말 감사합니다 :) – user3592240

0

루프 사용 for. 문자열이 제공 한 형식을 엄격하게 따르는 경우이 경우

def stringToDictionary(s, pairSeparator, keyValueSeparator): 
    items = s.split(pairSeparator) 
    data = {} 
    for item in items: 
     keyvalpair = item.split(keyValueSeparator) 
     data[keyvalpair[0].strip()] = float(keyvalpair[1]) # strip() removes unwanted trailing/leading spaces 

    return data 

print stringToDictionary("potatoes:2.67,sugar:1.98,cereal:5.99,crisps:1.09", ',', ':') 

편집 : 당신이 묻는 것처럼 기능이 만들어집니다.

0

당신과 같은 사용자 정의 함수 같은 논리를 구축 할 수의

>>> s = 'potatoes:2.67,sugar:1.98,cereal:5.99,crisps:1.09'.split(",") 
>>> d={} 
>>> for i in s: 
    d[i.split(':')[0]]=float(i.split(':')[1]) 


>>> d 
{'potatoes': '2.67', 'crisps': '1.09', 'cereal': '5.99', 'sugar': '1.98'} 
>>>