动态填充字典

时间:2016-12-19 17:32:26

标签: python loops dictionary

我很想知道是否可以直接将一组值附加到字典中,而不首先将它们存储在列表中,就像我在下面的代码中所做的那样。我的想法是省略tempD,tempR和tempA变量。

getD = {}
getR = {}
getA = {}
count = -1
for j in range(0, 180, 45):
    count += 1
    getD[count] = {}
    getR[count] = {}
    getA[count] = {}   
    tempD = [] 
    tempR = [] 
    tempA = [] 
    for k in range(len(lA)):        
        if (j <= lA[k] < j + step):
            tempD.append(lD[k])
            tempR.append(lR[k])
            tempA.append(lA[k])
            getD[count] = tempD
            getR[count] = tempR
            getA[count] = tempA

2 个答案:

答案 0 :(得分:1)

您可以使用defaultdict,以便getD[count]作为列表开始:

from collections import defaultdict   

getD = defaultdict(list)
getR = defaultdict(list)
getA = defaultdict(list) 
count = -1
for j in range(0, 180, 45):
    count += 1
    for k in range(len(lA)):        
        if (j <= lA[k] < j + step):
            getD[count].append(lD[k])
            getR[count].append(lR[k])
            getA[count].append(lA[k])

答案 1 :(得分:0)

即使这不是你的问题:在你的情况下,使用列表推导可能是有益的:

getD = {}
getR = {}
getA = {}
for count, j in enumerate(range(0, 180, 45)):
    aBound = j + step
    getD[count] = [lD[k] for k, a in enumerate(lA) if j <= lD[k] and a < aBound]
    getR[count] = [lR[k] for k, a in enumerate(lA) if j <= lR[k] and a < aBound]
    getA[count] = [a for a in lA if j <= a and a < aBound]

这也可以让你摆脱临时数组,也可以提高效率。