我需要遍歷列表字典,不知道字典將具有多少列表,但仍然將每個列表值與字典中另一個鍵(如果存在另一個鍵)生成的任何其他列表值進行配對。我有以下代碼:如何遍歷列表字典並將每次迭代與所有鍵中的項目進行配對?
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」這樣做的方式。我搜索了大量相同的東西,但大多數方法不會導致每次迭代的粗略值和精確值在一起。也寧願它首先粗略循環,但排序的命令不起作用。
編輯:剛纔意識到排序的命令正在工作,打印只是不排序。我不在乎它是否按順序打印。
我不認爲這與您的問題直接相關,但要小心使用字典作爲默認參數,因爲當您多次調用該函數時,它可能會有令人驚訝的行爲。相關閱讀:[「最小的驚訝」和可變的默認參數](https://stackoverflow.com/q/1132941/953482) – Kevin
@凱文:我想成爲。這就是爲什麼要製作字典的副本,並確保原始字典不會因原始調用而被修改。 –