Как извлечь определенные символы из строки в Python?

#python #string

#питон #строка

Вопрос:

допустим, у меня есть такая строка:

 coordinates:x=22,y=45;x=144,y=56;x=26,y=13;x=144,y=87  

и я хочу сохранить значения в 8 переменных:

 xCoord1 = 22 yCoord1 = 45 xCoord2 = 144 yCoord2 = 56 xCoord3 = 26 yCoord3 = 13 xCoord4 = 144 yCoord4 = 87  

Примечание: координаты могут состоять только из 2 или 3 цифр.

Комментарии:

1. Что вы пробовали до сих пор?

2. я попытался разрезать строку с помощью [:], но это не работает, потому что координаты имеют разную длину, они могут быть длиной 2 или 3 цифры

3. Вы могли бы сделать это, разделив строку, нарезка не требуется.

Ответ №1:

Лучше создайте словарь для хранения выходных данных.

Вы можете использовать re.findall для извлечения ключа/значений и понимания словаря для создания выходных данных.

Автоматическое увеличение клавиш может быть выполнено с помощью комбинации collections.defaultdict и itertools.count

 s = 'coordinates:x=22,y=45;x=144,y=56;x=26,y=13;x=144,y=87'  import re from itertools import count from collections import defaultdict  counter = defaultdict(lambda:count())  coords = {f'{k}Coord{next(counter[k]) 1}': int(v)  for k,v in re.findall('(w )=(d )', s)}  

выход:

 {'xCoord1': 22,  'yCoord1': 45,  'xCoord2': 144,  'yCoord2': 56,  'xCoord3': 26,  'yCoord3': 13,  'xCoord4': 144,  'yCoord4': 87}  

Затем получите доступ к своим значениям, выбрав согласованный по имени:

 gt;gt;gt; coords['xCoord1'] 22  
кортежи в качестве ключей:

Я бы даже предпочел использовать кортежи в качестве ключей:

 counter = defaultdict(lambda:count()) coords = {(k, next(counter[k]) 1): int(v)  for k,v in re.findall('(w )=(d )', s)}  coords['x', 1] # 22  

Комментарии:

1. потрясающе, спасибо!