我遇到了这个问题: 我有这样的词典{'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。 我可能是个愚蠢的问题,但我被困住了。
谢谢!
答案 0 :(得分: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}
答案 1 :(得分: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}
为什么在python3中删除了reduce
?
编辑:或者如果您更喜欢词典理解,可以使用:
d = {orderedKeys [i]: reduce (lambda x, y: x * y, (d [key] for key in orderedKeys [i:] ) ) for i in range (len (orderedKeys) ) }