0

我遇到了问题:我有这样的字典 {'a':9,'b':7,'c':12,'d':5} 现在我想做一个循环(不管我为什么想要为此,仅举个例子):取第一个值 9 并将其乘以 dict 中的每个其他值,即 9*7*12*5 然后我想取第二个值 7 并将其乘以它之后的每个值(!),即7*12*5,但不包括9!然后是 12*5 相同的东西(没有 9 和 7)

所以问题是在这种情况下如何进行双循环,因为我不能迭代字典中的索引,它只是键,我不能写 i+1。我可能是个愚蠢的问题,但我被困住了。

谢谢!

4

2 回答 2

2

如果您从某种有序结构开始,您可以执行以下操作:

my_list = [('a', 9), ('b', 7), ('c', 12), ('d', 5)]

def get_dict(my_list):
    my_dict = {}
    temp = 1
    for k,v in my_list[::-1]: # iterate in reverse not to multiply same numbers
                              # over and over
        temp *= v
        my_dict[k] = temp
    return my_dict

结果:

>>> get_dict(my_list)
{'a': 3780, 'c': 60, 'b': 420, 'd': 5}
于 2013-07-28T23:53:59.180 回答
1

订购钥匙后,您可以使用:

#! /usr/bin/python3
from functools import reduce

d = {'a':9,'b':7,'c':12,'d':5}

orderedKeys = sorted (d) #or whatever order you prefer
for start in range (len (orderedKeys) ):
    d [orderedKeys [start] ] = reduce (lambda x, y: x * y, (d [key] for key in orderedKeys [start:] ) )

print (d)

这会产生以下内容,希望这是您想要的:

{'b': 420, 'c': 60, 'a': 3780, 'd': 5}

为什么reduce在 python3 中删除了该死的东西?

编辑:或者,如果您更喜欢字典理解,您可以使用:

d = {orderedKeys [i]: reduce (lambda x, y: x * y, (d [key] for key in orderedKeys [i:] ) ) for i in range (len (orderedKeys) ) }
于 2013-07-28T23:40:51.753 回答