如何为不同的列表重复一个代码块?

时间:2018-12-02 23:18:05

标签: python python-3.x

我有四个空列表和一个字典,如下所示:

argv1_a=[]
argv1_b=[]
argv2_a=[]
argv2_b=[]
dic={'1':['1','x','build'],'2':['x','8','demolish'],'3':['3','x','build'],'4':['6','10','demolish']}

还有一个代码块(它基本上将字典的值附加到列表中并将其类型更改为int):

for i in dic.values():
    if i[2]=='build':
        if i[0]!='x':
            argv1_a.append(int(i[0]))
        else:
            argv1_a.append(i[0])
    elif i[2]=='demolish':
        if i[0]!='x':
            argv1_b.append(int(i[0]))
        else:
            argv1_b.append(i[0])
for i in dic.values():
    if i[2]=='build':
        if i[1]!='x':
            argv2_a.append(int(i[1]))
        else:
            argv2_a.append(i[1])
    elif i[2]=='demolish':
        if i[1]!='x':
            argv2_b.append(int(i[1]))
        else:
            argv2_b.append(i[1])

这是列表的最终结果:

argv1_a=[1, 3]
argv1_b=['x', 6]
argv2_a=['x', 'x']
argv2_b=[8, 10]

有没有一种更好的方法,而无需编写相同的代码块且不使用第三方库?

2 个答案:

答案 0 :(得分:1)

将值放入元组,并使用for循环:

for (a, b, offset) in ((argv1_a, argv1_b, 0), (argv2_a, argv2_b, 1)):
    for i in dic.values():
        if i[2]=='build':
            if i[offset]!='x':
                a.append(int(i[offset]))
            else:
                a.append(i[offset])
        elif i[2]=='demolish':
            if i[offset]!='x':
                b.append(int(i[offset]))
            else:
                b.append(i[offset])

答案 1 :(得分:0)

如果仅定义两个字典colliderd1,其中密钥d2包含argv1_a / argv2_a,密钥build包含argv1_b / argv2_b,则可以简化代码如下

demolish