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 時,您需要重新引入該格式。
添加回答
舉報