#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. потрясающе, спасибо!