ключи словаря - это множество (сам словарь - нагруженное множество)
читаемость важна
а преимущество… ну, к примеру, не нужно поддерживать индексацию
>>> myDict = {'a': 1, 'b': 2} >>> if 'a' in myDict: del myDict['a'] >>> myDict {'b': 2} >>>
ATOMесли цикл не нужен, а он нужен ему зачем-то, то просто .pop() выполняется
В данном случае я думаю не нужен цикл.
>>> myDict = {'a': 1, 'b': 2} >>> myDict.pop('a', None) 1 >>> myDict.pop('a', None) >>> myDict {'b': 2} >>>
py.user.nextИзвините, но здесть это не актуально. Получается матфетишизм :) Кроме того, это определение не совсем корректно.
ключи словаря - это множество (сам словарь - нагруженное множество)
4kptкод более логичный
Получается матфетишизм :)
4kptсловарь не является нагруженным множеством ?
Кроме того, это определение не совсем корректно.
4kptя думаю, что ты говоришь про что-то другое
А Вы считаете, что является?
The objects returned by the .keys() and .items() methods behave like sets.
The objects returned by .keys() and .items() are fully interoperable with instances of the built-in set and frozenset types; for example:is guaranteed to be True (except when d is being modified simultaneously by another thread).set(d.keys()) == d.keys()
bismigalisи что, множество ключей приводится к списку
в python2 dict.keys() возвращает list
>>> d = {1: 2, 3: 4} >>> k = d.keys() >>> k dict_keys([1, 3]) >>> k & {1, 2} {1} >>> [1, 3] & {1, 2} Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for &: 'list' and 'set' >>> >>> set(k) == k True >>> list(k) == k False >>>
bismigalis
list(dict.keys()) правильное решение
set(d.keys())