2015-02-25 5 views
0

Вопрос: Как вернуть строковое представление карты в следующем формате: {k1: v1, k2: v2, ..., kN: vN} ?? В основном, как определить __repr__?Строковое представление карты

ли я: формат = {k1: v1, k2: v2, ..., кН: Vn} strForm = ул (форма) печать (strForm) ??

Раздаточный:

  • Карта представляет собой контейнер для хранения коллекции записей данных в которой каждая запись связана с уникальным ключом. Ключевые компоненты должны быть сопоставимы. • Map(): создает новую пустую карту. • length(): Возвращает количество пар ключ/значение на карте. • содержит (ключ): Возвращает логическое значение, указывающее, является ли данный ключ на карте. • setitem (ключ, значение): добавляет новую пару ключ/значение к карте, если на карте нет ключа . Если ключ находится на карте, новое значение заменяет исходное значение, связанное с ключом. • getitem (ключ): возвращает значение, связанное с данным ключом, которое должно существовать. • clear(): Удаляет или опустошает карту, удаляя все пары ключ/значение. • keys(): Возвращает список, содержащий ключи, хранящиеся на карте. • values ​​(): Возвращает список, содержащий значения, хранящиеся на карте. • ToString(): Возвращает строковое представление карты в следующем формате: {k1: v1, k2: v2, ..., кН: Vn}

Мой код (проверено и работает хорошо) :

class Map : 

def __init__(self) : 
    self._key = list() 
    self._value = list() 

def __len__(self, key) : 
    return len(self._key) 

def __contains__(self, key) : 
    if key in self._key : 
     return True 
    else: 
     return False 

def __setitem__(self, key, value) : 
    if key in self._key : 
     pos = self._key.index(key) 
     self._value[pos] = value 
    else : 
     self._key.append(key) 
     self._value.append(value) 

def __getitem__(self, key) : 
    assert key in self._key 
    keypos = self._key.index(key) 
    return self._value[keypos] 

def clear(self) : 
    self._key = list() 
    self._value = list() 
    return 

def keys(self) : 
    return self._key 

def values(self) : 
    return self._value 

def __repr__(self): 
+0

ключ должен быть комплектом, а не списком. Наибольшее преимущество карты - быстрый поиск элементов по ключевым словам. – Beri

+0

Вы просто спрашиваете, как определить '__repr__'? – user3467349

+0

Профессор предпочитает использовать список – lindsey

ответ

3

Если вы действительно хотите, чтобы придумать все из словаря для себя я хотел бы написать метод __repr__ следующим образом

"{%s}" % (", ".join(["%s:%s" % (k,v) for k, v in zip(self._key, self._value)])) 
+0

Я думаю, что это '' {% s} "%' не требуется. – Marcin

+1

@Marcin Это добавить '{' и '}' – halex

+0

Как правило, метод '__init__' должен быть способен принимать' __repr__' в качестве аргумента no? Он лучше подклассифицирует существующий класс, например 'collections.mutablemapping', и записывает' __init__', который заполняет его требования. – user3467349

1

Я бы переопределить __str__ или __repr__ следующим образом:

def __repr__(self): 
    return '{%s}' % ', '.join(['{}:{}'.format(k, v) for k, v in zip(self._key, self._value)]) 
+0

Зачем форматировать здесь? – Marcin

Смежные вопросы