Элементарная путаница в python из бесплатной онлайн-книги, которую я читаю

#python #dictionary

#python #словарь

Вопрос:

Я читаю http://interactivepython.org/courselib/static/pythonds/Introduction/introduction.html#review-of-basic-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'])
>>>