2016-09-21 22 views
1

yamlファイルには、リストである2つのフィールドがあります。Python 3で辞書リストの値を一様に変換するには?

それは一種の次のようになります。

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

これは当然PyYAMLとライブラリとPythonの辞書に変換されます。

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

は私がリストに何かを扱っていたという事実に依存している解決策を考え出した:次のように

は最終的に私が一緒に壊したキーと値の文字列を取得したいですバグがあり、よりクリーンでジェネリックでエレガントな方法があるかどうか尋ねたいのですか?

UPD:@senchuk答えの後、私は自分自身をもう少し明確にしたいと思っていました。

問題はANY解決策ではありません。これは、私がPythonに慣れている人にとっては、意見に基づく質問に過ぎません。私は絶えずこの「ピジョンソニック」のことを聞いています。これは私が探しているものです!ヒップスター機能のあるもので何かするだろう。データ変換には何の制限もありません。スカラー値のすべてをリストに変換し、すべてを文字列に変換するのが最善の方法であれば、そうしてください。現代のPythonでこれがどのように行われているのか本当に興味があります。

+0

何を試しましたか?あなたのコードやあなたの試みを私たちに教えてください –

+0

@senchukのソリューションに非常に似た何かをしました。私はここで、味付けPython開発者が選択する方法を求めています。 – 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

申し訳ありませんが、これは機能しません! @チェンチックの答えを見てください。彼の答えは正確には私が探しているものではありませんが、それは動作します。 – staroselskii

+0

申し訳ありません!私はあなたの辞書の値としてリストを持っていたことを認識していない、私はあなたが文字列値を扱っていたと思った。はいchenchuksソリューションが動作し、あなたはpythonicの意味をより具体的にすることができますか?もっと効率的なのと同様に??私はあなたの応答をありがとう! – BLang

+0

ごめんなさい!私はリスト内包、itertoolsなどを考えていた。私は物事を過度に複雑化しようとはしていない。しかし、タイプ(v)がリストの場合は '' ''と入力する瞬間です。私は大丈夫だと思います。通常私は自分自身を見つけますが、今回は1時間無駄にしました。私が思いついたすべての解決策は、私がリストを扱っているという事実を緩和することでした。 – staroselskii

関連する問題