Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中组合给定索引的字典元素_Python - Fatal编程技术网

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

在python中组合给定索引的字典元素,python,Python,我必须用同样长度的字典。我有两个索引。我要做的是创建一个新字典,如下所示: 字典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 =

我必须用同样长度的字典。我有两个索引。我要做的是创建一个新字典,如下所示:

字典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的长度不同。你能帮我吗


非常感谢

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

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

您可以使用OrderedDict from collections来保持键的有序,但随后您必须调整键以保持键的有序,这不太好

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

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()

    ...

当然,您必须将uuu getitem uuuuuuuuuuuuu setitem uuuuuuuuuuuuuuuu iter uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuiitems和所有其他子类化,使其行为类似于dict。然后您必须在如何处理项设置。。。当然,您可以避免使用dict子类,只需创建一个行为类似于dict的类,并仅定义以后要使用的方法。

字典不按顺序排列;你希望什么样的顺序。钥匙在里面?顺序很重要吗?我只想按照元素在dic1和DIC2中的顺序来做是的,顺序很重要。根据字典的插入和删除历史记录,.keys返回的键的顺序可能完全不同,即使当前内容相同。但当我执行lendic1时,它会给出字典中元素的数量,不是吗?字典确实有长度。字典中的键数定义了字典的长度。@MartijnPieters它仍然不是一个长度。它绝对是一个长度。您混淆了顺序,这里的顺序是任意的和长度。集合也有长度,并且没有集合顺序。我最多可以从每种类型中删除lenobj项,然后它们将为空。元组和列表都有长度和设置顺序。@MartijnPieters将其描述为长度是对语言的滥用,不管你怎么抗议。