Я пытаюсь автоматизировать серию тестов, и мне нужно иметь цикл, в котором я изменяю параметры.сгенерировать список словарей из словаря шаблона и ключей
mydictionary={'a':10,'b':100,'c':30}
def swapRules(d,rule):
"clear dict, set to 100 the rule that match the string"
print d, rule
if not d.has_key(rule): raise Exception("wrong string")
d=resetDict(d)
d[rule]=100
return d
def resetDict(d):
'''clear the dict '''
for i in d.keys():
d[i]=0
return d
def tests(d):
from itertools import starmap, repeat, izip
keys=d.keys()
paramsDictionaries=list(starmap(swapRules, izip(repeat(d),keys)))
print(paramsDictionaries)
Я не понимаю, почему при выполнении теста (mydictionary) вывод всегда содержит одно и то же значение. Кажется, что проблема не в неправильном использовании itertools: как REPL показывает, подставляя с простым списком понимания:
In [9]: keys=mydictionary.keys()
In [10]: [tr.swapRules(mydictionary,jj) for jj in keys]
{'a': 0, 'c': 0, 'b': 100} a
{'a': 100, 'c': 0, 'b': 0} c
{'a': 0, 'c': 100, 'b': 0} b
Out[10]:
[{'a': 0, 'b': 100, 'c': 0},
{'a': 0, 'b': 100, 'c': 0},
{'a': 0, 'b': 100, 'c': 0}]
Я очень озадачен, так как, когда функция swapRules вызывается в одиночку, производит ожидаемый результат, как показывают заявления печати ... любая идея о том, что я делаю неправильно? это каким-то образом кеширование?
Что должно произойти? – user2357112
Я бы ожидал: [{'a': 100, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 100}, { 'a': 0, 'b': 100, 'c': 0}] – deddu