Форум сайта python.su
0
Всем привет! Помогите прояснить, будьте добры.
Если я хочу обратиться к ключу словаря, но чтоб этим ключем было регулярное выражение.
Нужно для ключей “int(N)”, где N это число в диапазоне , получать одно и то же значение.
Примерно такой словарь:
dict = {'int([1-11])': 5}
"int(10)"
dict['int(10)']
dict['int(8)']
dict = {'int(1)': 5, 'int(2)': 5, .. 'int(11)': 5}
Отредактировано mpolitaev (Апрель 21, 2015 15:44:52)
Офлайн
568
mpolitaevДа
Возможно ли это сделать?
mpolitaevЭтот модуль, конечно, понадобится.
Может быть с помощью модуля re?
Офлайн
47
Пишешь свой класс с дикт-подобным интерфейсом, внутри делаешь магию которая тебе нужна
Офлайн
0
Тогда как это сделать?
Офлайн
0
А без класса не обойтись? Как-то так:
>>> dict = {re.compile('int([1-11])'): 5} >>> dict[КАКОЕ-ТО ВЫРАЖЕНИЕ НЕ ЗНАЮ ПОКА КАКОЕ] 5
Офлайн
568
mpolitaevнет
А без класса не обойтись?
Офлайн
47
как-то так
class StrangeDict(object): def __init__(self): self.data = [] self.keys = set() def __setitem__(self, key, value): if key in self.keys: raise KeyError("Key exists") self.keys.add(key) self.data.append((key, value)) def __getitem__(self, key): for exp, value in self.data: if self.match(key, exp): return value def match(self, key, exp): """magic happens here"""
Офлайн
0
FishHookВидел без класса делается.
Нет
limits = {'tinyint': 127, 'tinyint unsigned': 255, 'smallint': 32767, 'smallint unsigned': 65535} field_autoincrement = ('zxzxzxz', 'tinyint(4) unsigned', 'dsdsds') limit = limits[re.compile('\(\d+\)').sub('', field_autoincrement[1])] >>>limit 255
Отредактировано mpolitaev (Апрель 26, 2015 16:41:21)
Офлайн