Pyhton 字典 dict 和 set

不变对象dict(字典)和 set

dict

1.dict基本用法

dict 是字典的意思,就是把数据存在一个字典里面,查找也和字典一样方便。

例如:

name={'anqi': 1,'anqijiang': 2,'zhouanqi': 3}
print(name['anqijiang'])

结果:

2

一个key对应一个value,且一但初始化便不能改变。dict的key必须是不可变对象


2.dict如何避免key不存在编译器报错

使用defaultdict在没有key的时候会返回一个默认值:N/A,其余和dict相同
defaultdict

>>> from collections import defaultdict
>>> dd = defaultdict(lambda: 'N/A')
>>> dd['key1'] = 'abc'
>>> dd['key1'] # key1存在
'abc'
>>> dd['key2'] # key2不存在,返回默认值
'N/A'

3.将两个列表组合成一个字典

若无需排序可以使用:zip:

>>> name=['zaq', 'xsw', 'cde']
>>> poker=[[1,2],[3,4],[5,6]]
>>> dictr=dict(zip(name,poker)
>>> dictr
{'xsw': [3, 4], 'cde': [5, 6], 'zaq': [1, 2]}

4.字典有序排列–模块:OrdereDict

collections.OrderedDict()可以实现有序排列字典

d1 = collections.OrderedDict()
 d1['a'] = 'A'
 d1['b'] = 'B'
 d1['c'] = 'C'
 d1['1'] = '1'
 d1['2'] = '2'
 for k,v in d1.items():
     print k,v

输出:

Order dictionary
 a A
 b B
 c C
 1 1
 2 2

5.先进先出dict

from collections import OrderedDict

class LastUpdatedOrderedDict(OrderedDict):

    def __init__(self, capacity):
        super(LastUpdatedOrderedDict, self).__init__()
        self._capacity = capacity

    def __setitem__(self, key, value):
        containsKey = 1 if key in self else 0
        if len(self) - containsKey >= self._capacity:
            last = self.popitem(last=False)
            print('remove:', last)
        if containsKey:
            del self[key]
            print('set:', (key, value))
        else:
            print('add:', (key, value))
        OrderedDict.__setitem__(self, key, value)

其余用法与dict相同


set

set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。

要创建一个set,需要提供一个list作为输入集合:

>>> s = set([1, 2, 3])
>>> s
{1, 2, 3}

注意,传入的参数[1, 2, 3]是一个list,而显示的{1, 2, 3}只是告诉你这个set内部有1,2,3这3个元素,显示的顺序也不表示set是有序的。

重复的元素在set中自动被过滤。再次添加也没有效果。

因为dict和set存放的是 不可变量,所以将可变量放入dict或者是set 皆不可行。

看一组代码:

>>> tuple1=(1,2,3)                              #这是一个数组,其值不可变
>>> dict1={'tuple1':tuple1}                     #把这个数组放入字典中
>>> dict1                                       #可执行成功
{'tuple1': (1, 2, 3)}
>>> set1={tuple1}                               #放入set中
>>> set1                                        #可执行成功
{(1, 2, 3)}
>>> tuple2=(1,[2,3])                            #数组2,其元素中包括一个整形和一个列表,列表是可变对象
>>> dict2={'tuple2':tuple2}                      #因为dict中只有key是不可变对象
>>> dict2                                       #所以dict2可以执行
{'tuple2': (1, [2, 3])}
>>> set2={tuple2}                               #set整个存储的都是不可变对象,所以不可以执行
Traceback (most recent call last):
  File "<pyshell#46>", line 1, in <module>
    set2={tuple2}
TypeError: unhashable type: 'list'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值