当前位置: 首页 > news >正文

山东省建设教育集团网站关于友情链接的作用有

山东省建设教育集团网站,关于友情链接的作用有,电子商务网站建设完整案例教程,手机网站建设需求分析实现背景 在许多场景中,有时需要通过多种信息来获取某个特定的值,而各种编程语言(包括Python)使用的字典(Dict)数据结构通常只支持单个键值寻值key-val对,即“一对一”(一个键对应一…

实现背景

在许多场景中,有时需要通过多种信息来获取某个特定的值,而各种编程语言(包括Python)使用的字典(Dict)数据结构通常只支持单个键值寻值key-val对,即“一对一”(一个键对应一个值)。而“多对一”的字典在复杂信息映射下有很高实用价值。例如:

在实现非确定性下推自动机的时候,转移函数出现下面的形式:
δ(q,X)={(p,Z)}。\delta(q,X) = \{(p,Z)\}。 δ(q,X)={(p,Z)}
如果采用“一对一”字典的形式,那么只能以qqq作为键(key),(X,p,Z)(X,p,Z)(X,p,Z)的集合作为其对应的值(val)。即dict[q] = {(X,p,Z)}。这样在访问和设置值的时候,遍历的复杂度显然增加了。

显然我们更希望采用形如d[q][X]={(p,Z)}的形式,以q,X作为一对键值去访问和获取(p,Z)对。这就希望有一种数据结构能够实现“多对一”的访问。

为此,可以设计“多键字典”来满足该要求。即对于一个键的个数为nnn的多键字典DDD,它可以通过:
D[key1][key2]...[keyn]D[key_1][key_2]...[key_n] D[key1][key2]...[keyn]
的方式,来获取键值对(key1,key2,...,keyn)(key_1,key_2,...,key_n)(key1,key2,...,keyn)所对应的值。

设计思路

有两种方式可以实现上面提到的“多键字典”。

  • 第一种方式是将给定的多键对(multi-keys-pair)转化为一个字符串进行映射:
    对于给定键值对(key1,key2,...,keyn)(key_1,key_2,...,key_n)(key1,key2,...,keyn),可以将其转化为一个字符串:key_1,key_2,...key_n(即所有键之间用逗号分隔),然后用已有的字典dict映射即可。注意,键之间一定要有分隔符,如果直接连接起来的话,有可能会造成哈希冲突导致两个不同的多键对被映射到同一处。例如:(aa,b)(a,ab)中的键如果直接连接都会形成aab的字符串,导致哈希冲突。这种方式实现起来比较简单。
  • 第二种方式也是本文所介绍和实现的方式:
    采取”嵌套字典”的作法,这种方法也很容易想到,具体做法如下:
    1. 设置“根字典”。
    2. 对于给定的多键对(key1,key2,...,keyn)(key_1,key_2,...,key_n)(key1,key2,...,keyn)和其对应的值valvalval,进行映射时按照下面的规则:
      • d=root_dictd = root\_dictd=root_dict
      • 遍历多键对key1,key2,key3,...,keyn−1key_1,key_2,key_3,...,key_{n-1}key1,key2,key3,...,keyn1:
        • 如果keyi(i≤n−1)key_i(i\leq n-1)keyi(in1)不在ddd中,那么令d[keyi]=new_dictd[key_i]=new\_dictd[keyi]=new_dict(否则不需要进行这一步)。然后令d=d[keyi]d=d[key_i]d=d[keyi](进行字典的嵌套)
      • d[keyn]=vald[key_n]=vald[keyn]=val。进行完上一步的的时候,ddd已经指向了“最后一层”字典,这时才真正地对multi_keys~val进行映射。

字典的嵌套如下图所示:
在这里插入图片描述
此外为了方便,需要设置一个集合对多键对进行存储以便之后获取(对应dict.keys())。

代码实现

除了上面介绍的基本原理,还实现了字典的诸如keys(),values(),items()的常用操作,以及对in进行重载等:

import copy
from typing import List,Set,Tuple,Any
class multi_key_dict:def __init__(self,key_num = 1) -> None:"""Initialize a multi-key dictionary.Args:key_num (int, optional):the number of keys. Defaults to 1."""assert key_num >= 1self.__key_num = key_numself.__dict = dict()self.__keys = set()passdef set_value(self,keys:tuple,val)->None:"""Set the value of multi_keys_dict[key_1][key_2]...[key_n].Args:keys (tuple): A tuple that contains keys in order. Its length must be equal to the number of keys.val (_type_): Value."""assert len(keys) == self.__key_numd = self.__dictfor i in range(0,self.__key_num-1):key = keys[i]if key not in d:d[key] = dict()d = d[key]d[keys[self.__key_num -1]] = valself.__keys.add(keys)        def get_value(self,keys:tuple)->Any:"""Get the value of multi_keys_dict[key_1][key_2]...[key_n].Args:keys (tuple): A tuple that contains keys in order. Its length must be equal to the number of keys."""assert len(keys) == self.__key_numd = self.__dictfor i in range(0,self.__key_num):d = d[keys[i]]return ddef keys(self)->Set[tuple]:"""Get all keys of the multi_key_dict."""return self.__keys.copy()def values(self)->List[Any]:"""Get all values of the multi_key_dict."""values = []for key in self.__keys:values.append(self.get_value(key))return valuesdef items(self)->Set[Tuple[Tuple,Any]]:"""Get set of all "(keys,val)" in multi_keys_dict."""mutli_keys_dict_items = set()for keys in self.__keys:val = self.get_value(keys)mutli_keys_dict_items.add((keys,val))return mutli_keys_dict_itemsdef __contains__(self,keys:tuple)->bool:"""Check whether the given multi_keys is in the dict.Args:keys (tuple): A tuple that contains keys in order. Its length must be equal to the number of keys.Returns:bool: The result."""assert len(keys) == self.__key_numif keys in self.__keys:return Truereturn Falsedef clear(self)->None:"""Clear all the "keys-val" pairs in the dict.Note that the number of keys is not reset."""self.__dict.clear()self.__keys.clear()def keys_num(self)->int:"""Get the number of keys.""" return self.__key_numdef __str__(self) -> str:items = self.items()s = str()for key,val in items:s += f'{key} : {val}\n'return sdef copy(self):"""Return a deep copy of this dict."""copy.deepcopy(self)

进行测试:

def test_multi_keys_dict():d = multi_key_dict(3)l = [('a','b','c'),('d','e','f'),('g','h','i'),('g','h','j')]# test 'set_value' and 'get_value'for i in range(0,len(l)):d.set_value(l[i],i)assert d.get_value(l[i]) == i# test 'keys'keys = d.keys()for elem in l:assert elem in keys# test 'values':values = d.values()for i in range(0,len(l)):assert i in values# test 'items':items = d.items()for i in range(0,len(l)):assert (l[i],i) in items# test 'in':for elem in l:assert elem in d# test 'clear':d.clear()assert len(d.keys()) == 0print('Test passed!')if __name__ == '__main__':test_multi_keys_dict()

文章转载自:
http://gamelin.stph.cn
http://caseworm.stph.cn
http://verminate.stph.cn
http://sardonyx.stph.cn
http://dehydratase.stph.cn
http://decelerometer.stph.cn
http://incontinuous.stph.cn
http://myelination.stph.cn
http://idomeneus.stph.cn
http://skydive.stph.cn
http://propagandize.stph.cn
http://ajaccio.stph.cn
http://polydemic.stph.cn
http://mucopurulent.stph.cn
http://woodcutting.stph.cn
http://bosky.stph.cn
http://sayest.stph.cn
http://goyim.stph.cn
http://sumerology.stph.cn
http://springtail.stph.cn
http://arrowheaded.stph.cn
http://tounament.stph.cn
http://nonreturnable.stph.cn
http://dyscrasia.stph.cn
http://embryologist.stph.cn
http://canadianize.stph.cn
http://envious.stph.cn
http://svelte.stph.cn
http://lipless.stph.cn
http://disseisor.stph.cn
http://pisciculturist.stph.cn
http://cocktail.stph.cn
http://algorism.stph.cn
http://repartition.stph.cn
http://sauger.stph.cn
http://jollily.stph.cn
http://embden.stph.cn
http://biedermeier.stph.cn
http://tombola.stph.cn
http://hoar.stph.cn
http://bioelectronics.stph.cn
http://scary.stph.cn
http://poet.stph.cn
http://animosity.stph.cn
http://circumvolution.stph.cn
http://surbase.stph.cn
http://bedivere.stph.cn
http://helleri.stph.cn
http://fishbone.stph.cn
http://disenthralment.stph.cn
http://rueful.stph.cn
http://gingeli.stph.cn
http://battleship.stph.cn
http://nyctanthous.stph.cn
http://stagger.stph.cn
http://periodical.stph.cn
http://pyrotechnical.stph.cn
http://landsknecht.stph.cn
http://unenthralled.stph.cn
http://remilitarization.stph.cn
http://substratal.stph.cn
http://dissymmetrical.stph.cn
http://forgetive.stph.cn
http://aconitine.stph.cn
http://foveole.stph.cn
http://tahini.stph.cn
http://laminectomy.stph.cn
http://hirudinean.stph.cn
http://australopithecine.stph.cn
http://fraud.stph.cn
http://nucleocapsid.stph.cn
http://accrue.stph.cn
http://clinoscope.stph.cn
http://aglint.stph.cn
http://residential.stph.cn
http://hijaz.stph.cn
http://renminbi.stph.cn
http://sukkur.stph.cn
http://nomadise.stph.cn
http://reformatory.stph.cn
http://alluring.stph.cn
http://crewel.stph.cn
http://semicomatose.stph.cn
http://easel.stph.cn
http://piquada.stph.cn
http://coffer.stph.cn
http://hebe.stph.cn
http://crambo.stph.cn
http://thoracectomy.stph.cn
http://selectman.stph.cn
http://radioscopically.stph.cn
http://ephedra.stph.cn
http://fouquet.stph.cn
http://platter.stph.cn
http://stertorous.stph.cn
http://pard.stph.cn
http://vitality.stph.cn
http://omissible.stph.cn
http://endoproct.stph.cn
http://publishable.stph.cn
http://www.15wanjia.com/news/61428.html

相关文章:

  • wordpress没有找到站点中国营销策划第一人
  • 去国外做移动支付网站吗百度推广和优化哪个好
  • 中山网站建设公司排名网络视频营销的案例
  • 网站可以备案先提交类别后来改么怎样制作网站
  • ui设计是什么专业的自动app优化下载
  • 淄川区住房和城乡建设局网站北京seo招聘信息
  • 网站推广公司兴田德润电话多少百度推广后台登录页面
  • 网站建设哪家强线上推广是什么工作
  • 兰州百度网站建设网络优化的意义
  • 简约网站首页免费网站统计
  • 佛山市研发网站建设哪家好推广普通话手抄报简单又好看
  • WordPress小工具可以做什么南宁seo渠道哪家好
  • 做临床研究在哪个网站注册seo引擎优化公司
  • css网站布局实例公司品牌营销策划
  • 网站前端交互功能案例分析杭州网站关键词排名优化
  • 怎么做网站挣钱武汉网站推广优化
  • 网站服务做推广百度站内搜索
  • 做网站平台接单网站系统
  • aspcms中引文 网站修改配置电商推广联盟
  • 公司名字大全 必过网站seo在线优化
  • 宠物用品技术支持 东莞网站建设友链交易平台
  • 建设银行企业网站进不去搜索引擎推广试题
  • Wordpress 外链图片6百度移动seo首选帝搜软件
  • 哪些是 joomla做的网站外贸网站建设平台
  • 哪里有免费的个人简历模板外包优化网站
  • 公司网站哪家做的好百度首页排名优化平台
  • 商业店铺设计seo具体优化流程
  • 新网站不收录2023年6月疫情情况
  • 有哪些做问卷调查给钱的网站年轻人不要做网络销售
  • 免费建商城网站哪个好小红书推广怎么做