我要用相同长度的字典。而且我有两个索引。我要做的是创建一个像这样的新字典:字典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的类,并仅定义您将要使用的方法即可。之后使用。
添加回答
举报
0/150
提交
取消