gpt4 book ai didi

python - 检查配置以确保每个规则都是唯一的更好方法

转载 作者:太空宇宙 更新时间:2023-11-03 18:10:41 25 4
gpt4 key购买 nike

我有一个配置字典(由用户定义为 Django 应用程序的设置)。

我需要检查配置以确保它符合规则。

规则非常简单。每个选项中的“范围”必须是唯一的。

示例设置

breakpoints = {
'small': {
'verbose_name': _('Small screens'),
'min_width': None,
'max_width': 640,
},
'medium': {
'verbose_name': _('Medium screens'),
'min_width': 641,
'max_width': 1024,
},
'large': {
'verbose_name': _('Large screens'),
'min_width': 1025,
'max_width': 1440,
},
'xlarge': {
'verbose_name': _('XLarge screens'),
'min_width': 1441,
'max_width': 1920,
},
'xxlarge': {
'verbose_name': _('XXLarge screens'),
'min_width': 1921,
'max_width': None,
}
}

这是我到目前为止所得到的。它可以工作,但看起来不太Pythonic。

for alias, config in breakpoints.items():
for alias2, config2 in breakpoints.items():
if not alias2 is alias:
msg = error_msg % (alias, 'breakpoint clashes with %s breakpoint' % alias2)
for attr in ('min_width', 'max_width', ):
if config[attr] is not None:
if (config2['min_width'] and config2['max_width']) and \
(config2['min_width'] <= config[attr] <= config2['max_width']):
raise ImproperlyConfigured(msg)
elif (config2['min_width'] and not config2['max_width']) and \
(config2['min_width'] < config[attr]):
raise ImproperlyConfigured(msg)
elif (config2['max_width'] and not config2['min_width']) and \
(config2['max_width'] > config[attr]):
raise ImproperlyConfigured(msg)

有更好的方法可以解决这个问题吗?

最佳答案

如果您首先对数据集进行排序,则可以轻松扫描重叠范围。 “无”似乎在不同的地方用于不同的事物(最小值为零),最大值“比任何东西都大”——但这很难比较。如果你有一个真正的最大值,它会让排序变得更容易一些。

(编辑:扫描最大值,因为没有已知的最大值)

MAX = max(val.get('max_width', 0) for val in breakpoints.itervalues()) + 1
# sort by min/max
items = sorted(
(data['min_width'] or 0, data['max_width'] or MAX, name)
for name, data in breakpoints.iteritems())
# check if any range overlaps the next higher item
for i in range(len(items)-1):
if items[i][0] > items[i][1]:
print "range is incorrect for", items[i][1]
elif items[i][1] >= items[i+1][0]:
print items[i+1][2], 'overlaps'

关于python - 检查配置以确保每个规则都是唯一的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26027271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com