为了账号安全,请及时绑定邮箱和手机立即绑定

在python中合并字典给定索引的元素

在python中合并字典给定索引的元素

慕田峪7331174 2021-03-25 06:06:29
我要用相同长度的字典。而且我有两个索引。我要做的是创建一个像这样的新字典:字典1中从0到index1的元素字典2中从index1到index2的元素从index2到字典1的长度的元素我已经试过了:L = len(dic1)result = {}ini  = random.randint(0,L-1)end  = random.randint(inici+1,L)i = 0while i < ini:    key = dic1.keys()[i]    vaue = dic1.get(key)    result[key] = value    i += 1while i < end:    key = dic2.keys()[i]    vaue = dic2.get(key)    result[key] = value    i += 1while i < L:    key = dic1.keys()[i]    vaue = dic1.get(key)    result[key] = value    i += 1return result但是,当我执行几次迭代时,会出错,因为有时结果的长度与dic1和dic2的长度不同。你能帮我吗?
查看完整描述

2 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

您可以使用OrderedDictfromcollections来保持键的有序性,但是然后您必须根据需要调整键以使它们有序性,这并不美观。


您还可以对dict进行子类化,以创建某种类型的元dict,该meta dict实现一个dict的所有方法,同时包含对这三个dict的引用,并返回该方法中这三个dict的列表的并置keys(),内容接近:


class MetaDict(dict):

    def __init__(self, d1, d2, d3):

        self.d1 = d1

        self.d2 = d2

        self.d3 = d3


    def keys(self):

        return self.d1.keys() + self.d2.keys() + self.d3.keys()


    ...

当然,你得子类__getitem__(),__setitem__(),__iter__(),iteritems()和所有其他人,使其像一个字典。然后,您必须在如何处理项目设置方面做出大胆的选择...当然,您可以避免dict()子类,而只需创建一个行为类似于dict的类,并仅定义您将要使用的方法即可。之后使用。


查看完整回答
反对 回复 2021-03-30
?
桃花长相依

TA贡献1860条经验 获得超8个赞

字典没有长度,因为它们不是序列。因此,由字典本身定义的键范围没有自然定义。

您可能会以某种方式对键进行排序。


查看完整回答
反对 回复 2021-03-30
  • 2 回答
  • 0 关注
  • 182 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号