关于我应该在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 Dict.has_key()方法
- python 字典操作中has_key() 和 in 那个使用更加pythonic?
- Python 迭代字典时是否应该使用 keys()
- Python之路day05-字典_增删改查_keys_values_items
我应该在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()方法
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 比较。
在写代码时,使用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()
####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
前言时刻
上午讲的好多呀,信息量有点大,主要讲字典
来来总结:
今天主要讲了字典的创建、增: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的相关知识,请在本站寻找。
本文标签: