python通过什么实现映射-Python教程

资源魔 87 0
字典dict是Python中首要的数据构造,正在字典中,每个键都对应一个值,此中键与值的关系就叫做映照,也能够说是每个键都映照到一个值上。

映照(map)是更具普通性的数据类型,详细到Python中就是字典。(保举学习:Python视频教程)

正在应用字典的同时咱们肯定会有一个疑难,它是怎么经过键去映照到值的呢,它怎样晓得这个键的值是谁?

于是咱们有了一个这样的设法主意:

应用列表来存储一项一项的键值工具,寻觅的时分就遍历一遍列表,找到当键是你所要找的键时,掏出该工具中的值value。

这个设法主意很简略,咱们能够很快的完成一下:

这里先引见一些相干的形象基类,Mapping与MutableMapping,它们正在collections模块中,供咱们完成自界说的map类。Mapping蕴含dict中的一切没有变办法,MutableMapping扩大蕴含了一切可变办法,但它们两个都没有蕴含那五年夜外围非凡办法:getitem、setitem、delitem、len、iter。也就是说咱们的指标就是完成这五年夜外围办法使该数据构造可以应用。

from collections import MutableMapping

class MyMap(MutableMapping):

    class item():

        def __init__(self,key,value):
            self.key = key
            self.value = value

        def __eq__(self, other):
            return self.key == other.key

        def __ne__(self, other):
            return self.key != other.key

    def __init__(self):
        self.table = []

    def __getitem__(self, item):
        for i in self.table:
            if i.key == item:
                return i.value
        raise KeyError('Key Error: '+ repr(item))

    def __setitem__(self, key, value):
        for i in self.table:
            if i.key == key:
                i.value = value
                return
        self.table.append(self.item(key,value))

    def __delitem__(self, key):
        for n,i in enumerate(self.table):
            if i.key == key:
                self.pop(n)
                return
        raise KeyError('Key Error: '+ repr(key))

    def __len__(self):
        return len(self.table)

    def __iter__(self):
        for i in self.table:
            yield i.key

下面这个方法很简略,然而却没有是颇有效率,咱们每一次都需求遍历一遍列表能力找到该键的索引,以是工夫复杂的为O(n)。

更多Python相干技巧文章,请拜访Python教程栏目进行学习!

以上就是python经过甚么完成映照的具体内容,更多请存眷资源魔其它相干文章!

标签: Python python教程 python编程 python使用问题

抱歉,评论功能暂时关闭!