2016-06-13 69 views
0

我建立了一个OrderedDict和执行字典内涵不同的语法,我已经简化为一个功能dictcomp(fn, dictionary, key_or_value):OrderedDict更改阶双重迭代循环

​​

在这一点上我可以排序的词典:

x = self.dictcomp(self.sort_by_hue, x, 'v') 

一切似乎退房至今:

print x 

现在,我需要重新命名键,所以我将创建一个新的有序字典:

color_indexes = list(xrange(0, len(x.keys()))) 
    print color_indexes 

    newkeys = [self.rename(color_index) for color_index in color_indexes] 

    print x.values() 
    vi = iter(x.values()) 
    x = OrderedDict.fromkeys(newkeys); 

我不知道如何填写立即旧的价值观,所以我这样做:

ki = iter(x.keys()) 
    for k, v in zip(ki, vi): 
     #print "k:", k 
     print v 
     x[k] = tuple(v) 

检查了罚款:

print x.items() 

这里麻烦来了:

x = self.dictcomp(hsv_to_rgb, x, 'v_tuple') 
    print x.items() 

其中dictcomp做到这一点:

dictionary = {k: fn(*v) for k, v in dictionary.items()} 

其中fn=hsv_to_rgbdictionary=x

现在,我有:

[('Blue', (0.9764705882352941, 0.5529411764705883, 0.0)), .... 

,而不是预期:

[('Red', (0.4745098039215686, 0.7372549019607844, 0.23137254901960794)), .... 

的关键是一样,但价值已经改变。我猜测插入顺序受到某种程度的影响。这是怎么发生的?我怎样才能保持字典中键的顺序?

回答

0

的问题是由于

for i, j in zip([4, 5, 6], [1, 2, 3]): 
    print i 
    print j 

结果列:

4 1 5 2 6 3

事实证明,拉链用作拉链如果使用两个迭代器。

的解决办法是让关键字值作为迭代元组:

for i in zip([4, 5, 6], [1, 2, 3]): 
    print i 

返回

(4, 1) 
(5, 2) 
(6, 3)