1 回答
TA贡献1893条经验 获得超10个赞
让我们逐个看一下:
try:
sizes = []
for size in product.get('sizes'):
if size.get('atc'):
sizes.append('<{}|{}>'.format(size.get('atc'), size.get('size')))
else:
sizes.append(size.get('size'))
product['sizes'] = sizes
except Exception:
pass
你真的没有任何地方可以抛出异常,除了size in product.get,它可能无法迭代None。
product['sizes'] = sizes = []
for size in product.get('sizes', ()):
sizes.append((size.get('size'), size.get('atc'))
sizelist = []
for i in (i for i in product['sizes'] if i not in sizelist):
sizelist.append(i)
让我们尝试将“atc”添加到没有它的任何东西
atc_for_size = {}
for size, atc in sizes:
atc_for_size.setdefault(size, atc) # Keeps first found
sizelist = sorted(atc_for_size.items())
characterCount, i = 0, 0
for j, item in enumerate(sizelist):
if len(item) + characterCount > 900:
data['attachments'][0]['fields'].append(
{
'title': 'Sizes',
'value': '\n'.join(sizelist[i:j]) if len(sizelist) else '*Sizes not found*',
'short': True
}
)
characterCount, i = len(item), j
else:
characterCount += len(item)
if characterCount:
data['attachments'][0]['fields'].append(
{
'title': 'Sizes',
'value': '\n'.join(sizelist[i:]) if len(sizelist) else '*Sizes not found*',
'short': True
}
)
您在这里尝试做什么并不明显,您在帖子中提到字符有 1028 个限制,所以您需要尽可能多地适应?
如果 1028 限制是针对整个数据对象的,则您需要进行一些约束求解,并决定您是否宁愿只拥有不适合的尺寸,或者尽可能多地使用尺寸 + url,或者全部尺寸,最有可能的尺寸的 url 等等。如果不知道您在这里想要的行为,就没有通用的解决方案。
如果您只需要将其分成足够小的块,那么您可以保留上面的逻辑,并在添加之前检查它是否会使其太长。
请注意,此时sizelistcontains (size, url_or_None),而不是格式化的字符串,因此当您决定是否要包含 url 时,您需要重新引入该格式。
添加回答
举报