Python hashable dicts

Есть много способов сделать это!

jQuery

  1. удалить все классы
    $("element").removeClass();
    ИЛИ
    $("#item").removeAttr('class');
    ИЛИ
    $("#item").attr('class', '');
    ИЛИ
    $('#item')[0].className = '';

  2. удалить мультикласс
    $("element").removeClass("class1 ... classn");
    ИЛИ
    $("element").removeClass("class1").removeClass("...").removeClass("classn");

Родной Javascript

  1. удалить все классы
[1128]

// remove all items all class  
const items = document.querySelectorAll('item');
for (let i = 0; i < items.length; i++) {
    items[i].className = '';
}
  1. удалить мультикласс

// only remove all class of first item
const item1 = document.querySelector('item');
item1.className = '';
78
задан 5 revs, 2 users 98% 13 April 2015 в 10:47
поделиться

4 ответа

Вот простой способ сделать хешируемый словарь. Просто помните, что не следует изменять их после встраивания в другой словарь по очевидным причинам.

class hashabledict(dict):
    def __hash__(self):
        return hash(tuple(sorted(self.items())))
60
ответ дан 24 November 2019 в 10:28
поделиться

Hashables должны быть неизменными - не принудительно, но ДОВЕРЯЯ вам не изменять дикт после его первого использования в качестве ключа, будет работать следующий подход:

class hashabledict(dict):
  def __key(self):
    return tuple((k,self[k]) for k in sorted(self))
  def __hash__(self):
    return hash(self.__key())
  def __eq__(self, other):
    return self.__key() == other.__key()

Если вам ДЕЙСТВИТЕЛЬНО нужно изменить ваши диктовки и ВСЕ ЕЩЕ хотят использовать их в качестве ключей, сложность взрывается стократно - не сказать, что это невозможно, но я подожду ОЧЕНЬ конкретного указания, прежде чем попаду в ЭТО невероятное болото! -)

58
ответ дан 24 November 2019 в 10:28
поделиться

Достаточно чистая и простая реализация:

import collections

class FrozenDict(collections.Mapping):
    """Don't forget the docstrings!!"""

    def __init__(self, *args, **kwargs):
        self._d = dict(*args, **kwargs)

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

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

    def __getitem__(self, key):
        return self._d[key]

    def __hash__(self):
        return hash(tuple(sorted(self._d.iteritems())))
11
ответ дан 24 November 2019 в 10:28
поделиться

Вы также можете добавить эти два метода, чтобы протокол травления v2 работал с экземплярами hashdict. В противном случае cPickle попытается использовать hashdict .____ setitem____, что приведет к ошибке TypeError. Интересно, что с двумя другими версиями протокола ваш код работает нормально.

def __setstate__(self, objstate):
    for k,v in objstate.items():
        dict.__setitem__(self,k,v)
def __reduce__(self):
    return (hashdict, (), dict(self),)
2
ответ дан 24 November 2019 в 10:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: