2016-11-17 43 views
-1

這裏我關心的是如果name_3 [0]> 50,將其添加到html表中,並且如果name_3 [0] < = 50,則丟棄它並迭代到字典中的下一個值,因爲我不想在50以下添加條目。下面是我想到的邏輯。但是我們可以迭代下一個值嗎?在字典上迭代時,刪除不需要的元素並在字典中進一步移動(Python)

for name_1 in sorted(any_dictionary.keys()): 
    for name_2 in sorted(any_dictionary[name_1].keys()): 
     for name_3 in any_dictionary[name_1][name_2]: 
      if (name_3[0] > 50): 
        size_KB = name_3[0] 
      address=name_3[1] 
      html += """<tr> 
        <td>{}</td> 
        <td>{}</td> 
        <td>{:,}</td> 
        <td>{:,} [{}]</td> 
        <td>{}</td> 
        </tr>\n""".format(name_1, 
            name_2, 
            size_KB, 
            name_3[2], 
            name_3[3], 
            address) 
+2

您遍歷鍵,而不是值。它更像是:'for any key in any_dictionary' – sisanared

+0

字典不是有序的。如果您移除了某個元素,則不能保證會發生什麼。 https://docs.python.org/3/library/stdtypes.html#typesmapping – Goodies

+0

http://stackoverflow.com/questions/5384914/how-to-delete-items-from-a-dictionary-while-iterating- over-it –

回答

0

據我所知,在迭代它的同時更改字典(或列表或某些集合)永遠不是一個好主意。

也許將這些值保留在新字典中?

0

根據你最後的評論:

  • 遍歷值在字典
  • 只能指派size_KB並在其上運行,如果在值中的第一項是大於50

即(你不需要else塊):

>>> size_KB = None 
>>> d = {'a': [40], 'b': [50], 'c': [100], 'e': [30], 'f': [200]} 
>>> for value in d.values(): 
...  if (value[0] > 50): 
...   size_KB = value[0] 
...  print 'Value is:', value 
...  print 'Size is:', size_KB 
...  
Value is: [40] 
Size is: None 
Value is: [100] 
Size is: 100 
Value is: [50] 
Size is: 100 
Value is: [30] 
Size is: 100 
Value is: [200] 
Size is: 200 
>>> 

大小隻是分配給wh en value[0]大於50

爲HTML代碼:

>>> d = {'a': [40], 'b': [50], 'c': [100], 'e': [30], 'f': [200]} 
>>> row_template = '<tr><td>%s</td></tr>' 
>>> html = '<table style="width:100%">' + '\n'.join([row_template % value[0] for value in d.values() if value[0] > 50]) + '</table>' 
>>> html 
'<table style="width:100%"><tr><td>100</td></tr>\n<tr><td>200</td></tr></table>' 
+0

@Darsh這是迭代值的整個點。循環將轉到下一個元素。如果value [0]大於50,它將執行if語句的主體。否則,它只會繼續下一個值。 – Bahrom

+0

是的,你縮小了打印。它應該保留在IF內,以便在語句爲真時打印。否則,循環將繼續到下一個項目。 – Bahrom

+0

我故意這樣做了。我想使用size_KB作進一步的使用。 if語句 – Darsh