Telegram Group & Telegram Channel
🖥 Хитрая задача на Python для продвинутых: словарь, который работает как список

Представь структуру данных, которая:
• работает как dict — доступ по ключу
• работает как list — доступ по индексу
• сохраняет порядок вставки
• поддерживает .index(key) и .key_at(i)

📌 Задача: Реализуй класс IndexedDict, который делает всё это.

🔍 Пример использования:


d = IndexedDict()
d["a"] = 10
d["b"] = 20
d["c"] = 30

print(d["a"]) # 10
print(d[0]) # 10
print(d[1]) # 20
print(d.key_at(1)) # "b"
print(d.index("c")) # 2

for k in d:
print(k, d[k]) # перебор по ключам


⚠️ Подвох:

• Просто наследовать dict не получится — d[0] будет интерпретироваться как ключ, а не индекс
• Придётся реализовать двойную логику доступа вручную
• Нужно корректно поддержать __iter__, __getitem__, __len__ и др.

Решение:

```python
from collections.abc (collections.abc) import MutableMapping

class IndexedDict(MutableMapping):
def __init__(self):
self._data = {}
self._keys = []

def __getitem__(self, key):
if isinstance(key, int):
real_key = self._keys[key]
return self._data[real_key]
return self._data[key]

def __setitem__(self, key, value):
if key not in self._data:
self._keys.append(key)
self._data[key] = value

def __delitem__(self, key):
if key in self._data:
self._keys.remove(key)
del self._data[key]

def __iter__(self):
return iter(self._keys)

def __len__(self):
return len(self._data)

def index(self, key):
return self._keys.index(key)

def key_at(self, idx):
return self._keys[idx]
```

📈 Зачем это нужно:

• Отличная тренировка на переопределение магических методов
• Часто встречается в фреймворках (Pandas, SQLAlchemy)
• Тестирует знание ABC-классов (`collections.abc.MutableMapping`)
• Полезно для построения кастомных структур данных

Хочешь версию с `__contains__`, `__reversed__`, типизацией и сериализацией — пиши 💬



@Python_Community_ru



tg-me.com/Python_Community_ru/2626
Create:
Last Update:

🖥 Хитрая задача на Python для продвинутых: словарь, который работает как список

Представь структуру данных, которая:
• работает как dict — доступ по ключу
• работает как list — доступ по индексу
• сохраняет порядок вставки
• поддерживает .index(key) и .key_at(i)

📌 Задача: Реализуй класс IndexedDict, который делает всё это.

🔍 Пример использования:


d = IndexedDict()
d["a"] = 10
d["b"] = 20
d["c"] = 30

print(d["a"]) # 10
print(d[0]) # 10
print(d[1]) # 20
print(d.key_at(1)) # "b"
print(d.index("c")) # 2

for k in d:
print(k, d[k]) # перебор по ключам


⚠️ Подвох:

• Просто наследовать dict не получится — d[0] будет интерпретироваться как ключ, а не индекс
• Придётся реализовать двойную логику доступа вручную
• Нужно корректно поддержать __iter__, __getitem__, __len__ и др.

Решение:

```python
from collections.abc (collections.abc) import MutableMapping

class IndexedDict(MutableMapping):
def __init__(self):
self._data = {}
self._keys = []

def __getitem__(self, key):
if isinstance(key, int):
real_key = self._keys[key]
return self._data[real_key]
return self._data[key]

def __setitem__(self, key, value):
if key not in self._data:
self._keys.append(key)
self._data[key] = value

def __delitem__(self, key):
if key in self._data:
self._keys.remove(key)
del self._data[key]

def __iter__(self):
return iter(self._keys)

def __len__(self):
return len(self._data)

def index(self, key):
return self._keys.index(key)

def key_at(self, idx):
return self._keys[idx]
```

📈 Зачем это нужно:

• Отличная тренировка на переопределение магических методов
• Часто встречается в фреймворках (Pandas, SQLAlchemy)
• Тестирует знание ABC-классов (`collections.abc.MutableMapping`)
• Полезно для построения кастомных структур данных

Хочешь версию с `__contains__`, `__reversed__`, типизацией и сериализацией — пиши 💬



@Python_Community_ru

BY Python Community


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/Python_Community_ru/2626

View MORE
Open in Telegram


Python Community Telegram | DID YOU KNOW?

Date: |

Mr. Durov launched Telegram in late 2013 with his brother, Nikolai, just months before he was pushed out of VK, the Russian social-media platform he founded. Mr. Durov pitched his new app—funded with the proceeds from the VK sale—less as a business than as a way for people to send messages while avoiding government surveillance and censorship.

Telegram is riding high, adding tens of million of users this year. Now the bill is coming due.Telegram is one of the few significant social-media challengers to Facebook Inc., FB -1.90% on a trajectory toward one billion users active each month by the end of 2022, up from roughly 550 million today.

Python Community from fr


Telegram Python Community
FROM USA