Как задать условие в индексе?
map["value1"] = 1
map["value2"] = 2
map["value3"] = 3
map["1"] = 10
map["2"] = 20
map["3"] = 30
map["1, 5"] = 100
map["5, 5"] = 200
map["10, 5"] = 300
map.ploc[">=1"] // >>> {1=10, 2=20, 3=30}
map.ploc[">0, >0"] // >>> {(1, 5)=100, (5, 5)=200, (10, 5)=300}
где map = SpecialHashMap() - мой класс для расширения словаря.
ploc - поле для доступа (выборка всех пар ключ:значение по определенному условию)

Ответы (1 шт):
Автор решения: insolor
→ Ссылка
Это не решение конкретно по вашему заданию (мне лень писать разбор ключей и условий заданных в виде строк), а демонстрация принципа, как подобное сделать.
Под ваше задание вам нужно будет модифицировать метод __getitem__ класса Ploc.
class Ploc:
def __init__(self, d):
# Через параметр нужно d будет передать словарь,
# который нужно будет фильтровать по условию,
# переданному в квадратных скобках
self.dict = d
def __getitem__(self, filter_value):
new_map = SpecialHashm()
# Тут каким-то образом по filter_value фильтруем значения из self.dict
# Я буду считать, что передается лямбда-функция,
# которая принимает ключ, по его значению фильтрует
for key, value in self.dict.items():
try:
if filter_value(int(key)):
new_map[key] = value
except ValueError:
pass # Игнорируем ключи, которые не удалось преобразовать к int
return new_map
class SpecialHashm:
def __init__(self):
self.dict = dict()
self.ploc = Ploc(self.dict)
def __getitem__(self, key):
return self.dict[key]
def __setitem__(self, key, value):
self.dict[key] = value
def items(self):
return self.dict.items()
def __repr__(self):
return repr(self.dict)
m = SpecialHashm()
m["value1"] = 1
m["value2"] = 2
m["value3"] = 3
m["1"] = 10
m["2"] = 20
m["3"] = 30
m["1, 5"] = 100
m["5, 5"] = 200
m["10, 5"] = 300
print(m.ploc[lambda key: key >= 2]) # Выведет {'2': 20, '3': 30}