2017-11-12 6 views
3

書式設定された文字列を辞書に変換する方法がわかりません。文字列を2つのリストに分割して辞書に登録することを考えましたが、それを変換する方法が必要であると確信しています文字列を辞書に直接入力する。この形式の文字列をキー、値辞書形式に変換するにはどうすればよいですか?

これは私がこれまでに得るものです:

文字列:

'Me_of_temp_max: 13.91 Me_of_temp_min: 11.33 Me_of_p_max: 14.25 Me_of_p_min: 14.53' 

私はあちこち探しています何がこれです:

{'Me_of_temp_max': 13.91, 'Me_of_temp_min': 11.33, 'Me_of_p_max': 14.25, 'Me_of_p_min': 14.53} 

しかし、私はこれに到達するためにやったことだった。

items = {} 


result = ['Me_of_temp_max', 'Me_of_temp_min', 'Me_of_p_ma', 'Me_of_p_min'] 
result1 = [13.91, 11.33, 14.25, 14.53] 
for i in range(len(result)): 
     items[result[i]] = result1[i] 
return items 
+0

ここで、あなたの辞書の数値はどこから来ますか? 13.91はどのように18.38になりますか?書式設定された操作の – timgeb

+0

?それは重要ですか? –

+0

文字列 ''13 .91 ''からint 18.38 ''に行くロジックがわからないので、解決策を提供することはできません。 – timgeb

答えて

0

(space)に分割し、それらの値を反復処理したいとします。

s = 'Me_of_temp_max: 13.91 Me_of_temp_min: 11.33 Me_of_p_max: 14.25 Me_of_p_min: 14.53' 

s_key_vals = s.replace(':', '').split(' ') 

res = {} 
for idx, key in enumerate(s_key_vals): 
    if idx % 2 == 0: # will be an even number, every time ``idx`` is even, it means key is a value like: ``Me_of_temp_min`` or ``Me_of_p_min`` etc 
     res[key] = float(s_key_vals[idx+1]) # Convert the number to a float instead of being left with a string. 

戻り値:{'Me_of_temp_min': 11.33, 'Me_of_p_min': 14.53, 'Me_of_temp_max': 13.91, 'Me_of_p_max': 14.25}

-1

「strin g.split( '') '、後者は': 'を処理します。このようにして、偶数と奇数の場所にキーと数字(文字列として)が含まれるリストが作成されます。

0

どのようにこのことについて:私は空白を削除し、Meで分割

input = "Me_of_temp_max: 13.91 Me_of_temp_min: 11.33 Me_of_p_max: 14.25 Me_of_p_min: 14.53" 

spl = input.split("Me") 
spl_noempty = [("Me"+x).strip().split(':') for x in spl if x != ''] 

dic = dict(spl_noempty) 
print(dic) 

。私はMeを再び先頭に入れて、それぞれの部分を:に分割してタプルのリストを作成し、次にdictを作成します。

0

これは正規表現で行う方法です。つまり、データの形式に合わせて変更する必要があります。

import re 

s = 'Me_of_temp_max: 13.91 Me_of_temp_min: 11.33 Me_of_p_max: 14.25 Me_of_p_min: 14.53' 
regex = re.compile('(\w+):\s(\d+\.\d+)') 
{k: float(v) for k, v in regex.findall(s)} 

出力:

{'Me_of_p_max': 14.25, 
'Me_of_p_min': 14.53, 
'Me_of_temp_max': 13.91, 
'Me_of_temp_min': 11.33} 
2

dictionaryを構築するために、文字列を処理するためにsplitreplaceを使用して、そしてzip単純な二ライナー:

>>> t = s.replace(':','').split() 
>>> dict(zip(t[::2], list(map(float,t[1::2])))) 

#driver値:

IN : s = 'Me_of_temp_max: 13.91 Me_of_temp_min: 11.33 Me_of_p_max: 14.25 Me_of_p_min: 14.53' 
OUT : {'Me_of_temp_max': 13.91, 'Me_of_temp_min': 11.33, 'Me_of_p_max': 14.25, 'Me_of_p_min': 14.53} 

さらなる説明:

  1. replace機能は、彼らが必要とされていないとして、文字列内のすべての':'を削除するために使用されます。
  2. スペースを区切り文字として持つsplit関数は、キーと値のリストを提供します。
  3. zip機能はdict
    • ためkey-valueペアを作成し、keysでも位置にあるので、我々は[::2]としてextended slicingを使用して、必要なリストを取得します。
    • であり、valuesの奇数位置にあるため、extended slicingとして[1::2]を使用して必要なリストを取得します。値はfloatであるため、float値を含むリストを取得するにはmapを使用します。
  4. 最後にtype-castからdictである。
関連する問題