辞書の値を使って特定の文字列をどのように抽出できるかを理解しようとしています。文字列と整数を辞書に抽出する
例:
ShirtType: 11, 14
variance: 11,12,13,14,15
color: Red
は、正規表現を使用してのアイデアを愛し、それはPythonで実現することができる方法を見て思い
item SHIRT 11-14 variance 11-12-13-14-15 color Red
?すべてのアイデアは大歓迎です。
辞書の値を使って特定の文字列をどのように抽出できるかを理解しようとしています。文字列と整数を辞書に抽出する
例:
ShirtType: 11, 14
variance: 11,12,13,14,15
color: Red
は、正規表現を使用してのアイデアを愛し、それはPythonで実現することができる方法を見て思い
item SHIRT 11-14 variance 11-12-13-14-15 color Red
?すべてのアイデアは大歓迎です。
ご入力はあなたが値を抽出し、辞書にそれらを挿入するためにregex
を使用できることを好きで、常にされている場合:
import re
dic = {}
input = 'item SHIRT 11-14 variance 11-12-13-14-15 color Red'
dic['Shirt Type'] = re.search('(?<=SHIRT\s)[\d-]+', input).group().split('-')
dic['Variance'] = re.search('(?<=variance\s)[\d-]+', input).group().split('-')
dic['Color']= re.search('(?<=color\s)\w+', input).group().split('-')
print(dic)
結果は辞書が3 keys
、ea
{'Shirt Type': ['11', '14'], 'Variance': ['11', '12', '13', '14', '15'], 'Color': ['Red']}
regex
の式を使用して、文字列から必要な値を抽出することができます。ここで取得するワンライナーですdict
希望:各正規表現パターンの
{'color': 'Red', 'variance': ['11', '12', '13', '14', '15'], 'shirt': ['11', '14']}
説明:
# For shirt:
# This regex matches the number and hyphen "-"
# preceded by "variance" and space " "
>>> re.search('(?<=SHIRT\s)[\d-]+', my_str).group()
'11-14'
# For variance:
# Same as the above regex, it matches the number and hyphen "-"
# preceded by "SHIRT" and space " "
>>> re.search('(?<=variance\s)[\d-]+', my_str).group()
'11-12-13-14-15'
# For color:
# This regex matches the alphabets followed by "color" and space " "
>>> re.search('(?<=color\s)\w+', my_str).group()
'Red'
これを使用するようdict
オブジェクトを返します
>>> import re
>>> my_str = "item SHIRT 11-14 variance 11-12-13-14-15 color Red"
>>> keys = ["shirt", "variance", "color"]
>>> {k: v.split('-') if '-' in v else v for k, v in zip(keys, re.findall(
'(?<=SHIRT\s)[\d-]+|(?<=variance\s)[\d-]+|(?<=color\s)\w+',my_str))}
明示的に各キーを
dict
に割り当てることもできます。
あなたはこれを試すことができます。
import re
s = "item SHIRT 11-14 variance 11-12-13-14-15 color Red"
new_s = s.split()[1:]
final_data = {"ShirtType" if a == "SHIRT" else a:map(int, b.split('-')) if re.findall('\d\-', b) else b for a, b in [(new_s[i], new_s[i+1]) for i in range(0, len(new_s)-1, 2)]}
出力:
{'color': 'Red', 'ShirtType': [11, 14], 'variance': [11, 12, 13, 14, 15]}
あなたはまた、正規表現を使用せずに試すことができます:例えば、これはあなたの入力した結果である - CH value
は、(その中に配列のサイズを入力しての数によって異なります)配列となります
一行溶液:
print({line.split()[1:][i:i+2][0]:line.split()[1:][i:i+2][1] for line in open('file.txt','r') for i in range(0,len(line.split()[1:]),2)})
出力:
{'color': 'Red', 'variance': '11-12-13-14-15', 'SHIRT': '11-14'}
詳細バージョン:
with open('file.txt','r') as f:
for line in f:
chunk=line.split()[1:]
print({chunk[i:i+2][0]:chunk[i:i+2][1] for i in range(0,len(chunk),2)})
のみ**バージョンspecifc質問はpython2 /のpython3タグを使用します**。 –
は 'item SHIRT'、' variance'、 'color'部分のテキストは常に静的ですか? – user1767754
希望の結果を得るために[one-liner solution](https://stackoverflow.com/a/48045525/2063361)を追加しました –