【发布时间】:2017-09-08 17:32:58
【问题描述】:
我需要遍历一个列表字典,不知道该字典将有多少个列表,但仍将每个列表值与字典中另一个键生成的任何其他列表值配对(如果存在另一个)。我有以下代码:
def loop_rec(codes, currentcode={}):
if len(codes.keys())>1:
for key in sorted(codes):
codespop = dict(codes)
loop = codespop.pop(key)
for x in loop:
currentcode[key]=x
loop_rec(codespop,currentcode)
break
else:
for key in codes.keys():
loop = codes[key]
for x in loop:
currentcode[key]=x
print currentcode
如果我有以下字典:
codes = {"coarse":range(4),"fine":range(2)}
我得到这个结果:
>>> loop_rec(codes)
{'fine': 0, 'coarse': 0}
{'fine': 1, 'coarse': 0}
{'fine': 0, 'coarse': 1}
{'fine': 1, 'coarse': 1}
{'fine': 0, 'coarse': 2}
{'fine': 1, 'coarse': 2}
{'fine': 0, 'coarse': 3}
{'fine': 1, 'coarse': 3}
这是一种蛮力方法,需要一种更“Pythonic”的方式来执行此操作。我搜索了很多等效的东西,但大多数方法不会导致每次迭代的粗略和精细值都在一起。也希望它先通过粗略循环,但排序命令不起作用。
编辑:刚刚意识到排序命令正在工作,打印输出没有排序。我不在乎它是否按顺序打印。
【问题讨论】:
-
我认为这与您的问题没有直接关系,但请小心使用字典作为默认参数,因为当您多次调用该函数时,它可能会出现令人惊讶的行为。相关阅读:“Least Astonishment” and the Mutable Default Argument
-
@Kevin:我正在努力成为。这就是为什么要制作字典副本并确保原始字典不会因原始调用而被修改的原因。
标签: python dictionary recursiveiterator