python六大常用基本数据类型之字典

字典

1.key-value键值对的数据的集合
2.可变的、无序的、key不重复

字典dict定义 初始化

d = dict() 或者 d = {} ->就是他这个哥哥欺负了集合弟弟 集合set()
集合使用键值对
键key(必须可hash)唯一 值可以重复

>>> dict((('a',2),('b',2)))#元祖
{'a': 2, 'b': 2}
>>> dict([['b',3],['d',3]])#列表
{'b': 3, 'd': 3}
>>>
#####解决疑问
>>> {[1]}####集合key
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> {[1]:2}###字典key
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>>#############下面是官方文档中使用方法介绍
>>> a = dict(one=1, two=2, three=3)
>>> b = {'one': 1, 'two': 2, 'three': 3}
>>> c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
>>> d = dict([('two', 2), ('one', 1), ('three', 3)])
>>> e = dict({'three': 3, 'one': 1, 'two': 2})
>>> a == b == c == d == e
True

dict(iterable)使用可迭代对象和name=value对构造字典时,所使用可迭代元素必须是一个二元结构

3.类方法 dict.fromkeys(iterable,value)
d = dict.fromkeys(range(5))
d = dict.fromkeys(range(5),0)

>>> d = dict.fromkeys(range(5))
>>> d
{0: None, 1: None, 2: None, 3: None, 4: None}
>>> d = dict.fromkeys(range(5),0)
>>> d
{0: 0, 1: 0, 2: 0, 3: 0, 4: 0}
>>>

字典元素的访问

1.d[key]
返回key对应的值value
key不存在抛出KeyError
2.get(key[,default])
返回key对应的值value
key不存在返回缺省值,没有缺省默认返回None
3.setdefault(key[,default])
返回key对应的值value
key不存在,添加kv对,value设置的缺省default,如果default没有设置,缺省默认None

>>> d
{0: 0, 1: 0, 2: 1, 3: 0, 4: 0}
>>> d[2]
1
>>> d.get(2,0)
1
>>> d.get(5)
>>> d.get(5,0)
0
>>> d.setdefault(2)
1
>>> d
{0: 0, 1: 0, 2: 1, 3: 0, 4: 0}
>>> d.setdefault(5,2)
2
>>> d
{0: 0, 1: 0, 2: 1, 3: 0, 4: 0, 5: 2}
>>>

字典增加和修改

1.d[key] = value
key 存在即修改 不存在即添加新的kv对
2.update([other]) ->None
使用另一个字典的kv对更新本字典
key不存在,就添加
key存在覆盖已经存在的key对应的值
就地修改

>>> d
{0: 0, 1: 0, 2: 1, 3: 0, 4: 0, 5: 2}
>>> d[5] = 3
>>> d
{0: 0, 1: 0, 2: 1, 3: 0, 4: 0, 5: 3}
>>> c = {}
>>> c
{}
>>> c.update(d)
>>> c
{0: 0, 1: 0, 2: 1, 3: 0, 4: 0, 5: 3}
>>> d
{0: 0, 1: 0, 2: 1, 3: 0, 4: 0, 5: 3}
>>> c = {3:5,7:4,6:1}
>>> c
{3: 5, 7: 4, 6: 1}
>>> c = dict({8:1})
>>> c
{8: 1}
>>> c.update(d)
>>> c
{8: 1, 0: 0, 1: 0, 2: 1, 3: 0, 4: 0, 5: 3}
>>>

##字典删除
1.pop(key,任意缺省值)
key存在,移除它,并返回它的value
key不存在,返回给定的default
defaul未设置,key不存在抛出keyError
2.popitem()
移除并返回一个任意键值对
字典为空抛出异常
3.clear()
清空字典
4.del语句
del d[key]
抹去了字典的对应key

>>> c
{8: 1, 0: 0, 1: 0, 2: 1, 3: 0, 4: 0, 5: 3}
>>> c.pop()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: pop expected at least 1 arguments, got 0
>>> c.pop(8)
1
>>> c.pop(8,2)
2
>>> c.pop(8)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 8
>>> c.popitem()
(5, 3)
>>> c.popitem(8)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: popitem() takes no arguments (1 given)
>>> d = {}
>>> d.popitem()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'popitem(): dictionary is empty'
>>> c.clear()
>>> c
{}
>>>#del
>>> c = dict({2:3,4:6,7:9,5:1})
>>> c
{2: 3, 4: 6, 7: 9, 5: 1}
>>> del c[2]
>>> c
{4: 6, 7: 9, 5: 1}
>>> del c[2]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 2
>>>

##字典遍历
for…in dict

1.for k in d:
print(d[k])
2.for k in d.keys():
	print(d.get(k))

3.for v in d.values():
	print(v)
4.for item in d.items():
	#遍历item->kv键值对
 	print(item)

字典的遍历与移除

   字典遍历的时候由于使用迭代器你是无法对他的整体长度进行修改的,简单点来看你可以理解为你看向你300格某一行,你视野范围内就那么大,一眼固定了范围,但是范围内的空格你可以给他修正,所以这就可以理解成长度无法变,值可以变化 。
   你用 键 key 值values 键值对 itmes去遍历都会返回一个 dictionary view对象 view 可以使用len(),iter(),in操作 返回一个view对象的时候你用循环中,迭代中无法改变他的长度。 
   如果你要一边遍历一遍删除你可以将key取出来放入容器比如(list),然后通过索引pop掉

###defaultdict

>>> from collections import defaultdict
>>> import random
>>> d1 = defaultdict(list)
>>> for k in 'abcdef':
...     for i in range(random.randint(1,5)):
...         d1[k].append(i)
... print(d1)

###OrderedDict
一个记录录入顺序的字典
字典还是无序的


border="0" width="330" height="86" src="//music.163.com/outchain/player?type=2&id=446557371&auto=1&height=66">

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值