【问题标题】:While iterating over dictionary, remove elements not required and move further in dictionary(Python)在遍历字典时,删除不需要的元素并在字典中进一步移动(Python)
【发布时间】:2016-11-17 16:43:53
【问题描述】:

我关心的是如果 name_3[0]>50,将其添加到 html 表中,如果 name_3[0]

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)

【问题讨论】:

标签: python dictionary defaultdict


【解决方案1】:

据我所知,在迭代字典(或列表或某些集合)时更改它绝不是一个好主意。

也许将您想要保留的那些值添加到新字典中?

【讨论】:

    【解决方案2】:

    根据您的最后评论:

    • 遍历字典中的值
    • 仅当 value 中的第一个条目大于 50 时才分配 size_KB 并对其进行操作。

    即(您不需要 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
    >>> 
    

    仅当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>'
    

    【讨论】:

    • @Darsh 这就是迭代值的重点。循环将移动到下一个元素。如果 value[0] 大于 50,它将执行 if 语句的主体。否则它只会移动到下一个值。
    • 是的,您取消了打印的缩进。它应该保留在 IF 中,以便在语句为 True 时打印。否则循环将继续到下一项。
    • 我是故意的。我想使用 size_KB 以供进一步使用。在 if 语句之外
    • 实际上,我正在将 size_KB 添加到 html 表中。因此,如果 size_KB=None,我不想添加它。我只想将 size_KB 添加到 html 表中,如果它 >50
    • 你的html表是什么数据类型?只是一个字符串?可以发在这里吗?
    猜你喜欢
    • 2022-01-14
    • 2021-10-02
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    • 2018-01-01
    • 1970-01-01
    相关资源
    最近更新 更多