这是我的问题:
假设我有两个词典,dict_a和dict_b。
它们中的每一个都有类似的键和值,我可以用同样的方式操作,实际上这就是我在一大段代码中所做的事情。只有我不想写两次。但是,我做不到这样的事情:
if choose_a == 1:
for x and y in dict_a.iteritems():
# goto line 20
if choose_b == 1:
for x and y in dict_b.iteritems():
# goto line 20
# line 20
# do stuff with x and y.
除了我不知道在这种情况下该怎么做。如果有一个类似的主题,请指出我,如果我违反了任何内容,请原谅我(第一篇文章)。在此先感谢,我感谢任何帮助。
答案 0 :(得分:4)
也许做这样的事情:
if choose_a == 1: the_dict=dict_a
elif choose_b == 1: the_dict=dict_b
for x,y in the_dict.iteritems():
# do stuff with x and y.
答案 1 :(得分:3)
def do_stuff( d ):
for x and y in d.iteritems():
whatever with x and y
if choose_a == 1: do_stuff( dict_a )
if choose_b == 1: do_stuff( dict_b )
答案 2 :(得分:2)
如果choose_a
和choose_b
都属实,您希望发生什么?如果它们都不是真的怎么办?这些条件中的任何一种都是可能的......?
你可以负担得起将所有“东西”移到一个单独的函数中,因为有几个答案已经提出,或者由此产生的范围变化是否有问题?
如您所见,您遗留了许多未指定的内容(或完全未指明)。假设最坏的......:
choose_...
个变量都可以为true,在这种情况下你需要同时使用dicts choose_...
个变量都可能为false,在这种情况下你不想做任何事情...然后:
thedicts = []
if choose_a == 1: thedicts.append(dict_a)
if choose_b == 1: thedicts.append(dict_b)
for d in thedicts:
for x, y in d.iteritems():
...do stuff _locally_ with x and y...
您可以更简洁地表达thedicts
列表的构建,但是,我认为,不是那么明确,可以通过在for
语句中进行汇总,例如如下......:
for d in [d for d, c in zip((dict_a, dict_b), (choose_a, choose_b)) if c]:
答案 3 :(得分:0)
只需定义一个函数。
def do_stuff(x, y):
# Do stuff
pass
if choose_a == 1:
for x and y in dict_a.iteritems():
do_stuff(x, y)
if choose_b == 1:
for x and y in dict_b.iteritems():
do_stuff(x, y)
答案 4 :(得分:0)
这个怎么样:
d = dict_a if choose_a else dict_b
for x, y in d.items():
# do stuff with x and y
显然,假设你要使用其中一个;如果不是这样的话,添加if语句非常简单。此外,您的x and y
语法无效,但我想您会明白这一点:)
答案 5 :(得分:0)
您可以将两个词典放在dict
中,然后使用键
例如:
choice = 'A' # or choice = 'B'
working_dict = {'A': dict_a, 'B': dict_b}[choice]
for x,y in working_dict.iteritems():
# do stuff with x and y
这与使用两个标志的方法略有不同。如果你坚持使用该方案,你可以使用类似的东西来设置choice
if choose_a == 1:
choice = 'A'
elif choose_b == 1:
choice = 'B'
else:
pass # maybe this should raise an exception?
也许以这种方式写它会更容易:
if choose_a == 1:
working_dict = dict_a
elif choose_b == 1:
working_dict = dict_b
else:
pass # maybe this should raise an exception?
for x,y in working_dict.iteritems():
# do stuff with x and y