Форум сайта python.su
13
ivantУ меня все так) Все уникальные в old'е, повторяющиеся (с моделями) в extra
# Life loop while alive: if (fun > boredom) and money: pass_day(fun, boredom, money) continue else: break
Офлайн
0
DamMercul
я конечно понимаю что надо учиться, но это явно выше моих умственных сил
Хорошо запутал код )
максимум к чему я пришел:
from copy import deepcopy products = [ {'sku': 'DS-AC-AANG9HA301', 'model': '1 (E82/87, 2004-2011)', 'qty': 4}, {'sku': 'DS-AC-AAN9L9HA332', 'model': '2 (1C, F22, 2014-)', 'qty': 6}, {'sku': 'DS-AC-AAN9N9HA32', 'model': '3 (1C, F22, 2014-)', 'qty': 10}, {'sku': 'DS-AC-AANG9HA304', 'model': '4 (1C, F22, 2014-)', 'qty': 4}, {'sku': 'DS-AC-AANG9HA304', 'model': '1 (1K4, F20, 2011-)', 'qty': 4}, {'sku': 'DS-AC-AANG9HA304', 'model': '2 (2C, F22, 2014-)', 'qty': 4}, {'sku': 'DS-AC-AANG9HA304', 'model': '1 (4C, F22, 2014-)', 'qty': 4}, {'sku': 'DS-AC-AAN9L9HA334', 'model': '1 (E82/87, 2004-2011)', 'qty': 6}] old=[] extra = [] for i in products: sku = i['sku'] if not sku in old: old.append(sku) continue model_code = "".join(i['model'].split(" ")[1:]) _new_i = deepcopy(sku) sku_new = sku + '-' + model_code extra.append(sku_new)
new_items_asdict = {products[a]['sku']: a for a in range(products.__len__())}
old_items = [a for a in old][:]
Отредактировано ivant (Авг. 28, 2018 15:41:51)
Офлайн
13
ivant1. Если ты просто сделаешь например А = B, а станет ссылкой на B до тех пор пока А не изменишь. То есть ИД будет у них одинаковый и при изменении А изменится и B. deep_copy копирует контент и ты можешь что угодно с переменной делать
DamMerculя конечно понимаю что надо учиться, но это явно выше моих умственных сил Хорошо запутал код )максимум к чему я пришел:
# Life loop while alive: if (fun > boredom) and money: pass_day(fun, boredom, money) continue else: break
Офлайн
16
Как-то так:
import copy import re from itertools import groupby from operator import itemgetter from pprint import pprint products = [ {'sku': 'DS-AC-AANG9HA301', 'model': '1 (E82/87, 2004-2011)', 'qty': 4}, {'sku': 'DS-AC-AAN9L9HA332', 'model': '2 (1C, F22, 2014-)', 'qty': 6}, {'sku': 'DS-AC-AAN9N9HA32', 'model': '3 (1C, F22, 2014-)', 'qty': 10}, {'sku': 'DS-AC-AANG9HA304', 'model': '4 (1C, F22, 2014-)', 'qty': 4}, {'sku': 'DS-AC-AANG9HA304', 'model': '1 (1K4, F20, 2011-)', 'qty': 4}, {'sku': 'DS-AC-AANG9HA304', 'model': '2 (2C, F22, 2014-)', 'qty': 4}, {'sku': 'DS-AC-AANG9HA304', 'model': '1 (4C, F22, 2014-)', 'qty': 4}, {'sku': 'DS-AC-AAN9L9HA334', 'model': '1 (E82/87, 2004-2011)', 'qty': 6} ] def get_new_sku(old_sku, model, pattern): match = pattern.search(model) return f"{old_sku}-{match.group(1).lower()}" if match else old_sku def get_unique_and_repeated_products(products): unique_products = [] repeated_products = [] pattern = re.compile(r'\d+\s\(([^,]+)') by_sku = itemgetter('sku') products_copy = sorted(copy.deepcopy(products), key=by_sku) for _, sku_group in groupby(products_copy, key=by_sku): unique, *repeated = sku_group unique_products.append(unique) if len(repeated) == 0: continue for item in repeated: item['sku'] = get_new_sku(item['sku'], item['model'], pattern) unique['grouped_sku'] = ', '.join(item['sku'] for item in repeated) repeated_products.extend(repeated) return unique_products, repeated_products unique_products, repeated_products = get_unique_and_repeated_products(products) pprint(unique_products) pprint(repeated_products)
Отредактировано Stright (Авг. 28, 2018 22:49:06)
Офлайн
0
Stright и DamMercul
Благодарю Вас за помощь! Многое стало яснее во время разбора предложенного Вами кода!
Надеюсь в недалёком будущем и сам смогу помогать! 
Всех благ Вам!
С уважением
ivant
Офлайн
13
StrightФорматирование это появилось только в python 3.6+, так что его пока не использовать
Как-то так:
# Life loop while alive: if (fun > boredom) and money: pass_day(fun, boredom, money) continue else: break
Офлайн
16
Спасибо, не буду
Офлайн
13
StrightАгась, лучше .format() или с процентами. Скоро пеп выпустят, тогда и хоть заюзайся никто не наругает xDD
Спасибо, не буду
# Life loop while alive: if (fun > boredom) and money: pass_day(fun, boredom, money) continue else: break
Офлайн