首页 > 解决方案 > 如何将我的 for 循环转换为字典理解?

问题描述

我是python的初学者。我面临一个问题,我只能通过使用通用 for 循环来解决。问题是

使用字典理解创建一个乘法表(最多 12 个)。键是“1 × 2”形式的字符串,值是两个数字的对应乘积。每个键中的第一个数字不能大于第二个数字。

table={}
for i in range(1,13):
    for j in range(1,13):
        if i<j:
            product = i*j
            phrase = 'x'.join([str(i),str(j)])
            temp={(phrase,product)}
            table.update(temp)
            j+=1   
    i+=1

第二个是使用函数filter()选择乘法表中因子之一为 11 或 12 的部分。显示过滤结果。但我只能选择键。我不知道如何显示表格中的所有项目。

def factorset(a):
    return '12' in a or '11' in a

list(filter(factorset,table))

标签: pythondictionary

解决方案


从只是将您现有的代码翻译为 dict 理解,我得到

multiplication_table = {f'{i}x{j}': i*j for i in range(1,13) for j in range(i,13)}

要进行过滤,您需要做一些像这样棘手的事情。

dict(filter(lambda x: '11' in x[0] or '12' in x[0], multiplication_table.items()))

让我们分解这段代码,multiplication_table.items()以元组的形式返回乘法表中所有项目的列表(例如[('1x12': 12), ... ])。

lambda x: '11' in x[0] or '12' in x[0]如果字符串 11 或 12 包含在元组的第一个元素中,则匿名函数 返回 true。

过滤器将此函数应用于元组列表。


推荐阅读