0

我有相同长度的字典。我有两个索引。我要做的是创建一个像这样的新字典:

  • 字典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 = 0
while i < ini:
    key = dic1.keys()[i]
    vaue = dic1.get(key)
    result[key] = value
    i += 1

while i < end:
    key = dic2.keys()[i]
    vaue = dic2.get(key)
    result[key] = value
    i += 1

while i < L:
    key = dic1.keys()[i]
    vaue = dic1.get(key)
    result[key] = value
    i += 1

return result

但是当我执行多次迭代时,它会出错,因为有时结果的长度与 dic1 和 dic2 的长度不同。你能帮我吗?

非常感谢!!

4

2 回答 2

0

您可以使用OrderedDictfromcollections来保持键的顺序,但是您必须调整键以使它们按您想要的顺序排列,这并不漂亮。

您还可以将 dict 子类化,以创建某种元 dict,它实现 dict 的所有方法,同时包含对三个 dicts 的引用并返回keys()方法中三个 dicts 的列表的串联,接近:

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 的类并只定义你将要使用的方法之后使用。

于 2013-06-05T23:51:10.657 回答
-2

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

也许您可以以某种方式对键进行排序。

于 2013-06-05T23:43:08.293 回答