2016-11-11 77 views
1


我目前正在爲我的HTML頁面編寫一小段邏輯。我的目標是在迭代中創建變量(列表)(使用迭代來創建所述列表的名稱,因爲它們的數量對於程序是未知的)。我目前正在創建的列表如下:
使用迭代在字典中創建多個列表

maps={} 
    currentMap = elements[0].process 
    counter=0 
    for i in elements: 
     if(counter==0): 
      maps["mapsEle{0}".format(counter)]=[] 
      counter+=1 
     if(i.process!=currentMap): 
      currentMap = i.process 
      maps["mapEle{0}".format(counter)]=[] 
      counter+=1 
     else: 
      print("No change found, keeping heading the same.") 

然而,你可能會說,這不創建一個列表,但一個字符串。我嘗試打印變量(例如mapsEle0)並且它返回變量名稱(例如print(mapsEle0)返回「mapsEle0」),我也很驚訝,因爲如果字典將它保存爲字符串,它會打印出「 []」。

所以我正在尋找一種方法來創建我在那裏使用的迭代字典中的列表,基本上只是想重新格式化我的聲明。提前歡呼所有人:)

編輯:
根據要求,這裏是我試圖追加的代碼。請注意,我想將'i'附加到列表中,並且沒有字典。

for i in maps: 
     for x in elements: 
      if(x.process!=currentMap): 
       currentMap=x.process 
      elif(x.process==currentMap): 
       #i.append(x) 
+0

有一個空列表for循環之前進行初始化並追加「i」鍵它 –

回答

1

print語句的語法是錯誤的,如果你想查閱字典的內容,你需要使用不同的符號。

而不是print('mapsEle0')你需要做print(maps['mapsEle0'])

更新:

很遺憾,您的你想要的描述,你的代碼是有點矛盾的,所以如果可以的話,請儘量解釋得有些什麼這個代碼是應該做的。

for i in maps.iterkeys(): 
     for x in elements: 
      if(x.process!=currentMap): 
       currentMap=x.process 
      elif(x.process==currentMap): 
       maps[i].append(x) 

這將遍歷的maps'mapsEle0'...'mapsEleN')所有按鍵,並添加x到包含列表如果elif條件滿足。

+0

好的,謝謝你,有道理但是這不是主要的問題,如果你看過這個問題的問題是,mapsEle0是一個字符串而不是一個列表。我需要追加到列表中,它給「str沒有屬性追加」 –

+0

@ J.Scull我懷疑你的追加語法也有錯誤。請將該代碼添加到您的問題中。我無法幫你修復那些不存在的代碼。您在字典中創建空列表的方式看起來很好。 – sobek

+0

謝謝你的打印工作。我已將追加代碼添加到問題中。 –

1

通過執行print('mapsEle0')來打印字符串。 要打印的字典,你必須print(maps) - 「會打印整個字典,OR,打印特定的鍵/件print(maps['mapsEle0'])

爲了進一步此詳述了這是一個解釋器會話:

>>> maps = {} 
>>> counter = 0 
>>> maps["mapsEle{0}".format(counter)]=[] 
>>> maps 
{'mapsEle0': []} 
>>> 
>>> print(maps) 
{'mapsEle0': []} 
>>> 
>>> print(maps['mapsEle0']) 
[] 
>>> 

對於追加部分:

>>> maps['mapsEle1'].append('hello') 
>>> print(maps['mapsEle1']) 
['hello'] 

編輯2:你的說法目前還不清楚

這裏要求的是我試圖追加的代碼。請注意I 想要將'i'附加到列表中,並且沒有字典。

我覺得SOBEK得到了它的權利 - 要追加xmapsEle0mapsEle1名單,這是在maps字典鍵。

for i in maps.iterkeys(): 
    for x in elements: 
     if(x.process!=currentMap): 
      currentMap=x.process 
     elif(x.process==currentMap): 
      maps[i].append(x) 
+0

我已將追加代碼添加到問題中。問題是我需要追加一個未知長度的循環,所以我無法手動/逐個指定列表。 –

+1

請注意,我錯過了'maps.iterkeys'後面的空圓括號 – sobek

+0

@Nabeel Ahmed我對sobeks發表了評論,希望對我的目標有更明確的描述 –