#python #dictionary
#python #словарь
Вопрос:
Если adict
это словарь, то adict.keys()
возвращает ключи словаря в dict_keys
объекте. Однако я только что попробовал это в оболочке Python:
>>> a = {'a': 1, 'b': 2}
>>> a
{'a': 1, 'b': 2}
>>> a.keys()
['a', 'b']
>>> list(a.keys())
['a', 'b']
И в книге говорится, что если я наберу a.keys()
, он должен вернуть dict_items['a','b']
вместо just ['a','b']
. Почему это?
Ответ №1:
В вашей книге используется Python3
$ python3
Python 3.3.2 (default, Feb 28 2014, 00:52:16)
[GCC 4.8.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> a = {'a': 1, 'b': 2}
>>> a.keys()
dict_keys(['a', 'b'])
>>> a.items()
dict_items([('a', 1), ('b', 2)])
В python2 вместо этих новых объектов list
и dict_keys
возвращается a dict_items
Поскольку в книге используется Python3, вам, вероятно, следует продолжить и установить его вместе с вашим Python2, чтобы опробовать их примеры, иначе в дальнейшем у вас возникнет больше подобных проблем
Ответ №2:
Ваша книга была написана для Python 3.x, но вы используете Python 2.x.
Только в Python 3.x, dict.keys
возвращает объект просмотра словаря ключей словаря (или то, что вы назвали dict_keys
объектом):
>>> # Python 3.x interpreter
>>> a = {'a': 1, 'b': 2}
>>> a.keys()
dict_keys(['b', 'a'])
>>>
Однако в Python 2.x метод просто возвращает список ключей.
>>> # Python 2.x interpreter
>>> a = {'a': 1, 'b': 2}
>>> a.keys()
['b', 'a']
>>>
Вам нужно использовать dict.viewkeys
для получения объекта просмотра словаря, как в Python 3.x:
>>> # Python 2.x interpreter
>>> a = {'a': 1, 'b': 2}
>>> a.viewkeys()
dict_keys(['a', 'b'])
>>>