GVKun编程网logo

我应该在Python字典上使用'has_key()'或'in'吗?(python 字典 haskey)

14

关于我应该在Python字典上使用'has_key和'或'in'吗?的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于PythonDict.has_key()方法、python字典操作中ha

关于我应该在Python字典上使用'has_key'或'in'吗?的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Python Dict.has_key()方法、python 字典操作中has_key() 和 in 那个使用更加pythonic?、Python 迭代字典时是否应该使用 keys()、Python之路day05-字典_增删改查_keys_values_items等相关知识的信息别忘了在本站进行查找喔。

本文目录一览:

我应该在Python字典上使用'has_key()'或'in'吗?(python 字典 haskey)

我应该在Python字典上使用'has_key()'或'in'吗?(python 字典 haskey)

我不知道该怎么办:

d = {''a'': 1, ''b'': 2}''a'' in dTrue

要么:

d = {''a'': 1, ''b'': 2}d.has_key(''a'')True

答案1

小编典典

in 绝对更pythonic

实际上has_key()已在Python 3.x中删除。

Python Dict.has_key()方法

Python Dict.has_key()方法

Dict.has_key()方法

Python 字典(Dictionary) has_key() 函数用于判断键是否存在于字典中,如果键在字典dict里返回true,否则返回false。

has_key()方法语法:dict.has_key(key)

  * key -- 要在字典中查找的键。

  * 如果键在字典里返回true,否则返回false。

实例:

以下实例展示了 has_key()函数的使用方法:

#!/usr/bin/python
dict = {''Name'': ''Zara'', ''Age'': 7} print "Value : %s" % dict.has_key(''Age'') print "Value : %s" % dict.has_key(''Sex'')
执行结果:
Value : True
Value : False

另注:

Python 3.X 里不包含 has_key() 函数,被 __contains__(key) 替代:

dict3 = {''name'':''z'',''Age'':7,''class'':''First''};
print("Value : ",dict3.__contains__(''name''))
print("Value : ",dict3.__contains__(''sex''))
执行结果:
Value : True
Value : False

参考链接: https://www.runoob.com/python/att-dictionary-has_key.html


python 字典操作中has_key() 和 in 那个使用更加pythonic?

python 字典操作中has_key() 和 in 那个使用更加pythonic?

python 字典操作中has_key() 和 in 比较。

在写代码时,使用has_key()和in都可以达到我们想要的效果,那么使用has_key()和in那个更加pythonic?

d = {'a': 1, 'b': 2}
'a' in d
True

或者

从运算速度来比较:

python2比较:

> python2 -mtimeit -s'd=dict.fromkeys(range(99))' '12 in d'
10000000 loops, best of 3: 0.0374 usec per loop
> python2 -mtimeit -s'd=dict.fromkeys(range(99))' 'd.has_key(12)'
10000000 loops, best of 3: 0.0719 usec per loop

python3 去除了has_key()方法,参考:

has_key() was removed in Python 3.x.

从python版本支持:

Python 2.x 支持 has_key().

Python 2.3+ 和ython 3.x 支持  in.

总结:

使用in是更加pythonic

Python 迭代字典时是否应该使用 keys()

Python 迭代字典时是否应该使用 keys()

####Python2 的话,应该。

因为可迭代对象如果在迭代过程中长度发生了变化,就会引发 Runtime Error ,所以在 for k in some_dict: 这样的语句中,是不可以使用 .pop().update() 方法的:

RuntimeError                              Traceback (most recent call last)
----> 1 for k in foo:
      2     foo.pop(k)

RuntimeError: dictionary changed size during iteration

除非明确知道这次操作中不会增删被迭代对象的元素,否则应该先把对象的 keys 拿出来放到另一个对象里(keys() 方法返回的列表),以避免上面的异常。

但在 Python3 中, keys() 不再返回列表,而是被迭代对象的 dict_keys 属性,所以这招行不通了。可以考虑 list 转换、待迭代结束后再 pop 或者使用字典推导式。

Python之路day05-字典_增删改查_keys_values_items

Python之路day05-字典_增删改查_keys_values_items

前言时刻

上午讲的好多呀,信息量有点大,主要讲字典

来来总结:

今天主要讲了字典的创建、增:setdefault、删:pop、del、改、查:get

以及dic.keys()、 dic.values()、 dic.items()

字典

字典的特点是由键值对组成,其中键是可哈希的,一般是int、str,而值可以是任意数据类型,不可哈希。优点是查询速度快,但是存储空间较大,典型的用空间复杂度换时间。

从3.6X版本以来,字典默认有序,顺序按照字典建立前后顺序。

1、创建字典

# 1、最常用
dic = {''name'': ''come'', ''hobby'': [1, 2, 3], ''age'': 18}   # {''name'': ''come'', ''hobby'': [1, 2, 3], ''age'': 18}

# 2、拆包创建字典
dic2 = dict(((''name'', ''come''), (''age'', 18)))   # {''name'': ''come'', ''age'': 18}

# 3、传入键值创建
dic3 = dict(name="come", age=18)   # {''name'': ''come'', ''age'': 18}

2、增

1、常用 有则修改,无则添加。

dic = {''name'': ''come''}

# 1、常用 有则修改,无则添加
dic[''age''] = 18    # {''name'': ''come'', ''age'': 18}
dic[''name''] = ''on''   # {''name'': ''on'', ''age'': 18}

2、setdefault 有则不变,无则添加。

dic = {''name'': ''come''}

# 2、setdefault 有则不变,无则添加
dic.setdefault(''hobby'', ''看电影'')   # {''name'': ''on'', ''age'': 18, ''hobby'': ''看电影''}
dic.setdefault(''hobby'', "美食")   # {''name'': ''on'', ''age'': 18, ''hobby'': ''看电影''}

3、删

1. pop 函数

dict.pop(key[,default])

  • key: 要删除的键值
  • default: 如果没有 key,返回 default 值
dic = {''name'': ''come'', ''hobby'': [1, 2], ''age'': 18}

# 1、最常用 pop ,按键删除。注意列表中pop是按索引删除
dic.pop(''hobby'')   # {''name'': ''come'', ''age'': 18}

# 2、若删除不存在的键,可添加第二个参数并返回。类似get用法
res = dic.pop(''address'', "Sorry")
print(res)   # Sorry

2. del 函数

dic = {''name'': ''come'', ''age'': 18}

# 2、del
del dic[''age'']   # {''name'': ''come''}
print(dic)

del dic[''address'']   # 直接报错

3. clear 清空

直接清空字典,但保留字典格式

dic = {''name'': ''come'', ''age'': 18}

dic.clear()

4、改

dic = {''name'': ''come'', ''hobby'': [1, 2, 3], ''age'': 18}

# 1、
dic[''name''] = ''on''
print(dic)   # {''name'': ''on'', ''hobby'': [1, 2, 3], ''age'': 18}

dic[''hobby''].append(666)
print(dic)   # {''name'': ''on'', ''hobby'': [1, 2, 3, 666], ''age'': 18}

5、查

常用 dic.get(key) 获得键值。

dic = {''name'': ''come'', ''hobby'': [1, 2, 3], ''age'': 18}

# 1、最常用 get 
dic.get(''hobby'')   # [1, 2, 3]

print(dic.get(''address'', "Sorry"))   # Sorry

# 2、索引型
print(dic[''name''])   # come

print(dic[''address''])   # 直接报错

6、键值对迭代器

dic.keys():获取到字典所有键的迭代器对象

dic.values():获取到字典所有值的迭代器对象

dic.items():获取到字典所有键和值元组的迭代器对象、

dic = {''name'': ''come'', ''hobby'': [1, 2, 3], ''age'': 18}

# 1、
print(dic.keys())
print(dic.values())
print(dic.items())

# dict_keys([''name'', ''hobby'', ''age''])
# dict_values([''come'', [1, 2, 3], 18])
# dict_items([(''name'', ''come''), (''hobby'', [1, 2, 3]), (''age'', 18)])

# 2、例子2 迭代打印内容
for key, value in dic.items():
    print(f"键:{key} 值:{value}")
"""
键:name 值:come
键:hobby 值:[1, 2, 3]
键:age 值:18
"""

Last、小试牛刀:面试题

例1:

dic = {''hobby'': [1, 2, 3], ''age'': 18}

dic2 = dic.get(''hobby'')
dic2.append(666)

print(dic, dic2)
# ????问打印dic dic2的结果是?
# 1、{''hobby'': [1, 2, 3, 666], ''age'': 18} [1, 2, 3, 666]
# 2、{''hobby'': [1, 2, 3], ''age'': 18} [1, 2, 3, 666]

答案是1,你写对了吗?可能你会疑惑了,为什么是 dic2 的追加一个值,而 dic 中也会变?

这就涉及到深浅拷贝了,就像上面的 dic2 只是对键 "hobby" 的值引用,属于浅拷贝,并没有开辟自己的存储空间,说白了就是一个变量符号而已。当你修改 dic2 的值其实就是修改 dic 中的值,如果你只是想单独修改 dic2 的值,那就深度拷贝一下吧。

如:

import copy

# 1、深度拷贝
dic = {''hobby'': [1, 2, 3], ''age'': 18}

dic3 = copy.deepcopy(dic.get(''hobby''))
dic3.append(666)

print(dic)  # {''hobby'': [1, 2, 3], ''age'': 18}
print(dic3)   # [1, 2, 3, 666]

# 可以看到 dic 并没有被修改

总结

字典的内容还行,重要的是多练多总结,就这样,明天继续

关于我应该在Python字典上使用'has_key'或'in'吗?的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于Python Dict.has_key()方法、python 字典操作中has_key() 和 in 那个使用更加pythonic?、Python 迭代字典时是否应该使用 keys()、Python之路day05-字典_增删改查_keys_values_items的相关知识,请在本站寻找。

本文标签: