Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 21, 2015 15:42:33

mpolitaev
Зарегистрирован: 2015-04-21
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Ключи словаря как регулярные выражения.

Всем привет! Помогите прояснить, будьте добры.

Если я хочу обратиться к ключу словаря, но чтоб этим ключем было регулярное выражение.
Нужно для ключей “int(N)”, где N это число в диапазоне , получать одно и то же значение.

Примерно такой словарь:

dict = {'int([1-11])': 5}

Чтоб я мог обратиться к словарю по ключу
"int(10)"

Так:
dict['int(10)']
и получить 5,
dict['int(8)']
и получить ту же 5.

Но чтоб на каждый возмождный вариант строки “int(N)” не создавать по ключу:

dict = {'int(1)': 5, 'int(2)': 5, .. 'int(11)': 5}

Хочу иметь одно регулярное выражение в которое будут подходить все варианты “int(n)”. Возможно ли это сделать? Может быть с помощью модуля re?

Отредактировано mpolitaev (Апрель 21, 2015 15:44:52)

Офлайн

#2 Апрель 21, 2015 16:20:17

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Ключи словаря как регулярные выражения.

mpolitaev
Возможно ли это сделать?
Да
mpolitaev
Может быть с помощью модуля re?
Этот модуль, конечно, понадобится.



Офлайн

#3 Апрель 21, 2015 16:25:39

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

Ключи словаря как регулярные выражения.

Пишешь свой класс с дикт-подобным интерфейсом, внутри делаешь магию которая тебе нужна

Офлайн

#4 Апрель 21, 2015 16:27:15

mpolitaev
Зарегистрирован: 2015-04-21
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Ключи словаря как регулярные выражения.

Тогда как это сделать?

Офлайн

#5 Апрель 21, 2015 16:29:07

mpolitaev
Зарегистрирован: 2015-04-21
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Ключи словаря как регулярные выражения.

А без класса не обойтись? Как-то так:

>>> dict = {re.compile('int([1-11])'): 5}
>>> dict[КАКОЕ-ТО ВЫРАЖЕНИЕ НЕ ЗНАЮ ПОКА КАКОЕ]
5

Офлайн

#6 Апрель 21, 2015 16:31:48

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Ключи словаря как регулярные выражения.

mpolitaev
А без класса не обойтись?
нет



Офлайн

#7 Апрель 21, 2015 16:36:42

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

Ключи словаря как регулярные выражения.

как-то так

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"""

Офлайн

#8 Апрель 21, 2015 16:43:56

mpolitaev
Зарегистрирован: 2015-04-21
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Ключи словаря как регулярные выражения.

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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version