Вопрос:

Почему dict.has_key () не работает в Python?

python-3.x dictionary python-2.x

3780 просмотра

3 ответа

20 Репутация автора

На этот вопрос уже есть ответ здесь:

Пример:

Dict={"Name":"Sai","Age":23}
"Age" in Dict

Урожайность TRUE, но

Dict.has_key("Age")

Выдает ошибку. Это почему??

Автор: Sai Kumar Reddy Источник Размещён: 03.01.2018 04:36

Ответы (3)


2 плюса

772 Репутация автора

has_keys() был удален в Python 3.x

просто используйте inэто все еще лучше, чемhas_keys()

источник: https://docs.python.org/3.1/whatsnew/3.0.html#builtins

Автор: SunriseM Размещён: 03.01.2018 04:42

-1 плюса

153 Репутация автора

Поскольку Python 3.x has_keys () func был удален, вы легко можете использовать «если еще» заменить его

https://docs.python.org/3.1/whatsnew/3.0.html#builtins

def has_key(key, data)    
    return key in data
Автор: Cloud Размещён: 03.01.2018 04:44

0 плюса

4693 Репутация автора

has_key()Метод в Python2. Это не доступно в Python3.

dir() Функция может возвращать методы, определенные в объекте словаря.

Вы можете проверить наличие has_key()в обеих версиях, как я сделал следующим образом,

Python 2.7.13

hygull@hygull:~$ python
Python 2.7.12 (default, Nov 20 2017, 18:23:56) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 
>>> dir(dict)
['__class__', '__cmp__', '__contains__', '__delattr__', '__delitem__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values', 'viewitems', 'viewkeys', 'viewvalues']
>>> 
>>> # Checking the index of 'has_key' in the above list
...
>>> dir(dict).index("has_key")
32
>>> 
>>> Dict = {"Name": "Sai", "Age": 23};
>>> print (Dict.has_key("Age"))
True
>>> 

Python 3.6.2

hygull@hygull:~$ python3
Python 3.5.2 (default, Nov 23 2017, 16:37:01) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
>>> dir(dict)
['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
>>> 
>>> Dict = {"Name": "Sai", "Age": 23}
>>> print(Dict.has_key("Age"))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'dict' object has no attribute 'has_key'
>>> 

Таким образом, вы можете попробовать следующий код, чтобы проверить наличие ключей в словаре.

Будет работать Python2и то и Python3другое.

>>> 
>>> # Defining a dictionary
... 
>>> Dict = {"Name": "Sai", "Age": 23};
>>> 
>>> # 1st way to check existence of key using get() method defined on dictionary object
... 
>>> if Dict.get("Age"):
...     print (Dict.get("Age"));
... else:
...     print ("key \"Age\" does not exist in Dict.")
... 
23
>>> 
>>> if Dict.get("Age2"):
...     print (Dict.get("Age2"));
... else:
...     print ("key \"Age2\" does not exist in Dict.")
... 
key "Age2" does not exist in Dict.
>>> 
>>> 
>>> # 2nd way to check existence of key using try-catch statement(Exception handling concept)
...
>>> try:
...     print (Dict["Age2"])
... except KeyError:
...     print ("key \"Age2\" does not exist in Dict.")
... 
key "Age2" does not exist in Dict.
>>> 
>>> try:
...     print (Dict["Age"])
... except KeyError:
...     print ("key \"Age\" does not exist in Dict.")
... 
23
>>> 
Автор: hygull Размещён: 03.01.2018 05:40
Вопросы из категории :
32x32