python - 嵌套在字典理解中的列表理解
问题描述
我想创建一个以列表为值的字典,其中列表上的内容取决于键(数字 1 到 100)是否可被 3,5 和/或 7 整除
输出将是这样的:
{
1: ['nodiv3', 'nodiv5', 'nodiv7'],
3: ['div3', 'nodiv5', 'nodiv7'],
15: ['div3', 'div5', 'nodiv7'],
}
关于过滤列表/值而不是创建它们的类似问题。
dict_divider = {}
for x in range(0,101):
div_list= []
if x % 3 == 0:
div_list.append('div3')
else:
div_list.append('nodiv3')
if x % 5 == 0:
div_list.append('div5')
else:
div_list.append('nodiv5')
if x % 7 == 0:
div_list.append('div7')
else:
div_list.append('nodiv7')
dict_divider[x] = div_list
这工作得很好,但是有没有办法用 pythonic one-/twoliner 做到这一点?
像这样的东西:d = dict((val, range(int(val), int(val) + 2)) for val in ['1', '2', '3'])
解决方案
Pythonic 不是关于一两个班轮。在我看来(主要)是关于可读性,也许这可以被认为是更pythonic:
def label(n, divisor):
return f"{'' if n % divisor == 0 else 'no'}div{divisor}"
def find_divisors(n, divisors=[3, 5, 7]):
return [label(n, divisor) for divisor in divisors]
dict_divider = {x: find_divisors(x) for x in range(1, 101)}
print(dict_divider)
推荐阅读
- delphi - Delphi:强制捕获匿名方法的“未使用”变量
- c# - c# 每 x 秒运行一次数据库任务
- metal - 在金属着色器中的缓冲区之间进行选择
- excel - 如何将 SAS 表格输出转换为 Excel 文件
- sql-server - 如何从分析服务器获取数据库的兼容级别?
- css - Rails:无法让 Facebook 使用 Rails 查找 CSS 背景图像
- relational-database - graphql multiple associations
- laravel - 在数据库中存储计算字段 - Laravel 5.7
- android - 当应用在 Android Pie 上受后台限制时启动前台服务
- javascript - Add Facebook Pixel to Vue project