我遇到了问题:我有这样的字典 {'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。我可能是个愚蠢的问题,但我被困住了。
谢谢!
我遇到了问题:我有这样的字典 {'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。我可能是个愚蠢的问题,但我被困住了。
谢谢!
如果您从某种有序结构开始,您可以执行以下操作:
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}
订购钥匙后,您可以使用:
#! /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) ) }