2016-11-17 3 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

。 '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

私が知る限り、辞書(またはリストまたは一部のセット)を反復して変更することは決してお勧めできません。

保存したい値を代わりに新しい辞書に追加することはできますか?あなたの最後のコメントを1として

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それは値を反復する全体のポイントです。ループは次の要素に移動します。値[0]が50より大きい場合、if文の本体が実行されます。それ以外の場合は、次の値に移動します。 – Bahrom

+0

はい、印刷をインデントしません。 IFの中に残っていなければならないので、ステートメントがTrueの場合は印刷されます。それ以外の場合、ループは次の項目に進みます。 – Bahrom

+0

私は意図的にやりました。私は、さらに使用するためにsize_KBを使用したいと思います。 if文の外側 – Darsh

関連する問題