Уведомления

Группа в Telegram: @pythonsu

#1 Май 6, 2013 13:18:28

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9885
Репутация: +  853  -
Профиль   Отправить e-mail  

Удаление частей словаря в цикле

ключи словаря - это множество (сам словарь - нагруженное множество)
читаемость важна
а преимущество… ну, к примеру, не нужно поддерживать индексацию



Отредактировано py.user.next (Май 6, 2013 13:19:07)

Офлайн

#2 Май 6, 2013 23:50:12

ATOM
Зарегистрирован: 2012-04-01
Сообщения: 8
Репутация: +  1  -
Профиль   Отправить e-mail  

Удаление частей словаря в цикле

В данном случае я думаю не нужен цикл. Можно использовать проверку на вхождение: проверка
наличия ключа.

>>> myDict = {'a': 1, 'b': 2}
>>> if 'a' in myDict:
        del myDict['a']
   
>>> myDict
{'b': 2}
>>> 



—————
Python 3

Отредактировано ATOM (Май 6, 2013 23:51:37)

Офлайн

#3 Май 7, 2013 01:54:46

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9885
Репутация: +  853  -
Профиль   Отправить e-mail  

Удаление частей словаря в цикле

ATOM
В данном случае я думаю не нужен цикл.
если цикл не нужен, а он нужен ему зачем-то, то просто .pop() выполняется

>>> myDict = {'a': 1, 'b': 2}
>>> myDict.pop('a', None)
1
>>> myDict.pop('a', None)
>>> myDict
{'b': 2}
>>>



Офлайн

#4 Май 8, 2013 00:31:59

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Удаление частей словаря в цикле

py.user.next
ключи словаря - это множество (сам словарь - нагруженное множество)
Извините, но здесть это не актуально. Получается матфетишизм :) Кроме того, это определение не совсем корректно.



Отредактировано 4kpt (Май 8, 2013 00:33:17)

Офлайн

#5 Май 8, 2013 01:39:01

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9885
Репутация: +  853  -
Профиль   Отправить e-mail  

Удаление частей словаря в цикле

4kpt
Получается матфетишизм :)
код более логичный

4kpt
Кроме того, это определение не совсем корректно.
словарь не является нагруженным множеством ?
или что ключи словаря - это не множество ?



Офлайн

#6 Май 8, 2013 01:42:29

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Удаление частей словаря в цикле

А Вы считаете, что является? К словарю сложно подобрать математическое определение. Я могу навскидку придумать еще как минимум два, которые тоже будут не менее корректны чем Ваши, но при этом не будут полностью отвечать словарю :)



Офлайн

#7 Май 8, 2013 06:38:15

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9885
Репутация: +  853  -
Профиль   Отправить e-mail  

Удаление частей словаря в цикле

есть динамическая структура - нагруженное множество, словарь является такой структурой

4kpt
А Вы считаете, что является?
я думаю, что ты говоришь про что-то другое



Офлайн

#8 Май 8, 2013 09:38:38

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

Удаление частей словаря в цикле

в python2 dict.keys() возвращает list, а в python3 view, так что в python3 list(dict.keys()) правильное решение

PEP3106

Офлайн

#9 Май 8, 2013 09:57:41

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9885
Репутация: +  853  -
Профиль   Отправить e-mail  

Удаление частей словаря в цикле

pep3106

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:
set(d.keys()) == d.keys()
is guaranteed to be True (except when d is being modified simultaneously by another thread).

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())
и это соотвествует тому, чем являются ключи



Отредактировано py.user.next (Май 8, 2013 10:00:04)

Офлайн

#10 Май 8, 2013 11:11:50

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Удаление частей словаря в цикле

py.user.next
Вопрос снят. Просто это опеределение никак не соотносится со старой теорией множеств. Это, как я понял, новая структура, принятая в рассмотрение в теории множеств специально для описания процесса программирования. Для себя я словари представлял по-другому :)



Отредактировано 4kpt (Май 8, 2013 12:15:54)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version