2016-09-21 1 views
1

나는 목록 인 두 개의 필드가있는 yaml 파일을 가지고있다.파이썬 3에서 사전 목록 값을 균일하게 변환하는 방법은 무엇입니까?

그것은 다음과 같은 종류의 외모 :

key0: "value0" 
key1: ["value1-0", "value1-1", "value1-2"] 
key2: ["value2-0", "value2-1", "value2-2"] 
key3: "value3" 

이것은 자연스럽게 PyYAML 라이브러리 파이썬 사전으로 변환됩니다.

--key0 value0 --key1 value1-0 --key1 value1-1 --key1 value1-2 ... --key3 value3

가 나는 목록하지만 뭔가 다루고있어 사실에 의존하는 솔루션을 내놓았다 다음과 같이

은 결국 나는 함께 박살 키와 값의 문자열을 얻으려면 나를 괴롭 히고 좀 더 깨끗하고 일반적이고 우아한 방법이 있는지 묻고 싶습니다.

UPD : @senchuk 대답 후 나는 좀 더 명확하게하고 싶었다.

질문은 어떤 해결책이 아닙니다. 이것은 필자가 생각하는 것보다 파이썬에 익숙한 사람들을위한 의견 기반 질문 일뿐입니다. 나는이 "파이썬"방식에 관해 끊임없이 듣고 있습니다. 이게 내가 찾고있는거야! hipster 기능을 가진 무언가가 할 것입니다. 데이터 변환에는 아무런 제한이 없습니다. 가장 좋은 방법은 모든 스칼라 값을 목록으로 변환 한 다음 모든 것을 문자열로 변환하는 것이므로 그렇게하십시오. 오늘 파이썬에서 이것이 어떻게 이루어지는 지 궁금합니다. 당신은 이미 당신이 사전에 알아 낸 변환 뭔가가있는 경우

+0

무슨 시도 했습니까? 귀하의 코드 또는 귀하가 시도한 어떤 시도도 저희와 공유하십시오 –

+0

@senchuk의 해결책과 비슷한 것을했습니다. 노련한 파이썬 개발자들이 선택할 수있는 방법을 묻습니다. – staroselskii

답변

0

당신은 문자열을 구축하기 위해 사전을 반복 할 수 원하는 일을해야한다. 항목이 목록 인 경우 요소를 반복해야합니다.

참고 : 사전은 순서가 지정되지 않은 모음이므로 출력이 다를 수 있습니다.

dict={"key0": "value0", "key1": ["value1-0", "value1-1", "value1-2"], "key2": ["value2-0", "value2-1", "value2-2"], "key3": "value3"} 

s = '' 
for k,v in dict.items(): 
    print(k, v) 
    if type(v) is list: 
     for elem in v: 
      s+= '--' + k + ' ' + str(elem) + ' ' 
    else: 
     s+= '--' + k + ' ' + str(v) + ' ' 

print(s) 

>>> --key1 value1-0 --key1 value1-1 --key1 value1-2 --key0 value0 --key3 value3 --key2 value2-0 --key2 value2-1 --key2 value2-2 
+0

이것은 내가 작성한 코드와 거의 다릅니다. 나는 좀 더 "파이썬"이라고 생각했다. 이'''형''은 나를 괴롭혔다. 그러므로 실제로는 질문입니다. – staroselskii

+0

불행히도 더 나은 접근법을 찾지 못했기 때문에 대답으로 표시하겠습니다. – staroselskii

0

, 다음이 당신이

d = {'key1' : 'value1', 'key2' : 'value2'} 
stringFinal = '' 
tempString = '' 
for k, v in d.items(): 
    tempString = str(k) + ' ' + str(v) 
    stringFinal ='--' + tempString + ' ' + stringFinal 
    tempString = '' 
print(stringFinal) 
+0

죄송합니다. 그러나 이것은 작동하지 않습니다! @chenchuk 대답을 한번보세요. 그/그녀의 대답은 정확히 내가 뭘 찾고있는 것은 아니지만, 그것은 작동합니다. – staroselskii

+0

미안 해요 !! 나는 당신이 당신의 사전에 값으로 목록을 가지고 있다는 것을 깨닫지 못했다. 나는 당신이 오직 문자열 값만을 다루고 있다고 생각했다. 그렇습니다 chenchuks 해결책은 작동하고, pythonic가 의미하는 것보다 더 구체적 일 수 있습니까? 더 효율적으로 ?? 귀하의 답변에 감사드립니다! – BLang

+0

죄송합니다. 나는리스트 comprehensions, itertools 등등을 생각하고 있었다. 나는 일반적으로 일을 지나치게 복잡하게하려고 노력하지 않고있다. 그러나 type (v)가 list이면''''라고 입력하면됩니다. 나는 괜찮다고 생각합니다. 또 다른 명확한 해결책이 있습니다. 보통 나는 1 개를 찾아 낸다 그러나 이번에 나는 아무 소용이없는 시간도 시도했다. 내가 생각해 낸 모든 해결책은 내가리스트를 다루고 있다는 사실을 경감하고 있었다. – staroselskii

관련 문제