2017-02-06 5 views
1

コンマ区切りリストをdictに変換するために、このような記述をしました。コロンで区切られたリストをdictに変換しますか?

def list_to_dict(rlist) : 
    rdict = {} 
    i = len (rlist) 
    while i: 
     i = i - 1 
     try : 
      rdict[rlist[i].split(":")[0].strip()] = rlist[i].split(":")[1].strip() 
     except : 
      print rlist[i] + ' Not a key value pair' 
      continue 


    return rdict 

for i, row = enumerate rlist 
    rdict = tuple (row) 

か何かに方法はありませんか?

+3

入力と出力の例を挙げることができますか?コロンで区切られたリストは意味を持たず、リストは別個の要素の集合で区切られていますが、デリミタは必要ありません。 –

+0

'item:'の ':"の場合、 '{item.split(": ")はrlistの項目になります。それがうまくいかない場合は、 'tuple(item.split(": "))'を入力してください。これは怠惰な遅い方法です '{item.split(": ")[0]:item.split(": ")[1] for rlistのアイテム}'これは文字列を辞書の表記に変換しているので'ast.literaleval'とjsonに変換します。 – HashSplat

+0

...またはCSV形式のファイルを読み込もうとしている場合は、[csv module](https://docs.python.org/3/library/csv.html)を使用する方が良い方法でしょう。 – spectras

答えて

1

お客様の要件を正しく理解している場合は、次の1行を使用することができます。

def list_to_dict(rlist): 
    return dict(map(lambda s : s.split(':'), rlist)) 

例:

>>> list_to_dict(['alpha:1', 'beta:2', 'gamma:3']) 
{'alpha': '1', 'beta': '2', 'gamma': '3'} 

あなたは空白をトリムするために、分割後strip()キーと値をお勧めします。

return dict(map(lambda s : map(str.strip, s.split(':')), rlist)) 
+0

どのように分割して削除するのですか? – Victor

+0

@Victorそれを行うには複数の方法がありますが、私は個人的に別の 'map()'を適用します。私はそれに応じて私の答えを編集しました。 – 5gon12eder

0

あなたが行うことができます。

>>> li=['a:1', 'b:2', 'c:3'] 
>>> dict(e.split(':') for e in li) 
{'a': '1', 'c': '3', 'b': '2'} 
0

をあなたは、カンマで区切られたキー/値ペアの文字列を持っている、とコロンで区切られた順番にキーと値を持つので、おそらく両方のコロンとカンマを言及します、そう:

def list_to_dict(rlist): 
    return {k.strip():v.strip() for k,v in (pair.split(':') for pair in rlist.split(','))} 

>>> list_to_dict('a:1,b:10,c:20') 
{'a': '1', 'c': '20', 'b': '10'} 
>>> list_to_dict('a:1, b:10, c:20') 
{'a': '1', 'c': '20', 'b': '10'} 
>>> list_to_dict('a : 1  , b: 10, c:20') 
{'a': '1', 'c': '20', 'b': '10'} 

これは、文字列から抽出されたキー/値のペアを含む辞書を作成するジェネレータ式を反復辞書理解を使用します。 strip()がキーと値に対して呼び出され、空白が処理されます。

関連する問題