Форум сайта python.su
Доброго времени суток. Сразу к делу. Создаю словарь замен для обработки текста. d={'water':, ‘carbonate’:['car.', ‘carb’…}. Так вот я организую поиск по значениям и хочу чтобы вместо значений подставились ключи. Если бы одному ключу одно значение, то это просто. Со множественным соответствием питон просто виснет
Заранее спасибо.
Офлайн
mineevmikelвиснет не питон, а ваш алгоритм, но вы нам его не показали. Поэтому могу помочь только так: бедненький, как же мне вас жаль!
Со множественным соответствием питон просто виснет
Офлайн
Всем доброго времени суток, у меня собственно схожая проблемма
req =[ { "meta": { "href": '2ab2a8e1-06fc-11eb-0a80-09950026157e', "type": "product", "mediaType": "application/json", }, "stockByStore": [ { "meta": { "href": "cdf4e4d9-7960-11ea-0a80-02cc00015063", "type": "store", "mediaType": "application/json" }, "name": "КБ Советская", "stock": 12.075, "reserve": 0.0, "inTransit": 0.0 }, { "meta": { "href": "7acec394-7b04-11ea-0a80-01940002ba4f", "type": "store", "mediaType": "application/json" }, "name": "Кулой", "stock": 8.609, "reserve": 0.0, "inTransit": 0.0 }, { "meta": { "href": "89e15a69-7950-11ea-0a80-043900008c70", "type": "store", "mediaType": "application/json" }, "name": "Основной склад", "stock": 83.0, "reserve": 0.0, "inTransit": 0.0 } ] }, { "meta": { "href": "8ec23fae-904e-11ea-0a80-05660005a116", "type": "product", "mediaType": "application/json" }, "stockByStore": [ { "meta": { "href": "cdf4e4d9-7960-11ea-0a80-02cc00015063", "type": "store", "mediaType": "application/json" }, "name": "КБ Советская", "stock": 1.1, "reserve": 0.0, "inTransit": 0.0 }, { "meta": { "href": "7acec394-7b04-11ea-0a80-01940002ba4f", "type": "store", "mediaType": "application/json" }, "name": "Кулой", "stock": 0.0, "reserve": 0.0, "inTransit": 0.0 }, { "meta": { "href": "89e15a69-7950-11ea-0a80-043900008c70", "type": "store", "mediaType": "application/json" }, "name": "Основной склад", "stock": 23.0, "reserve": 0.0, "inTransit": 0.0 } ] } ]
req2 = [ { "meta": { "href": "2ab2a8e1-06fc-11eb-0a80-09950026157e", "type": "product", "mediaType": "application/json" }, "stock": 103.684, "inTransit": 0.0, "reserve": 0.0, "quantity": 103.684, "name": "арахис в хрустящей корочке", "code": "00268", "price": 18000.0, "salePrice": 25000.0, "uom": { "meta": { "type": "uom", "mediaType": "application/json" }, "name": "кг" }, "externalCode": "WOywSqXtgrq3Wz0egCiQB2", "stockDays": 57.78 }, { "meta": { "href": "8ec23fae-904e-11ea-0a80-05660005a116", "type": "product", "mediaType": "application/json" }, "stock": 24.1, "inTransit": 0.0, "reserve": 0.0, "quantity": 24.1, "name": "арахис соленый", "code": "00166", "article": "арахис", "price": 16141.078838174273, "salePrice": 21500.0, "uom": { "meta": { "href": "2ec1170c-3f69-4409-87bb-c68e0011b275", "type": "uom", "mediaType": "application/json" }, "name": "кг" }, "externalCode": "vLXA07ARjLeF3vvs2LmeF2", "stockDays": 150.79 } ]
res_dic =[] warehause_list = ['КБ Советская','Кулой','Основной склад'] for i in req: dic1 = {} dic2 = {} dic3 = {} for x in i['stockByStore']: for product in req2: if x['name'] == warehause_list[0] and product['meta']['href'] == i['meta']['href']: dic1['name'] = warehause_list[0] dic1['product'] = product['name'] dic1['stock'] = x['stock'] res_dic.append(dic1) for x in i['stockByStore']: for product in req2: if x['name'] == warehause_list[1] and product['meta']['href'] == i['meta']['href']: dic2['name'] = warehause_list[1] dic2['product'] = product['name'] dic2['stock'] = x['stock'] res_dic.append(dic2) for x in i['stockByStore']: for product in req2: if x['name'] == warehause_list[2] and product['meta']['href'] == i['meta']['href']: dic3['name'] = warehause_list[2] dic3['product'] = product['name'] dic3['stock'] = x['stock'] res_dic.append(dic3)
Офлайн
keeper80
Всем доброго времени суток, у меня собственно схожая проблемма
keeper80
нужные мне данные ковырнул вот таким способом
keeper80
вот таким вот угобищном способом( переменная warehouse в ней создал список)
но вот если добавиться еще один warehouse то как быть, всю голову сломал но не могу сообразить как выйти из этой ситуёвины!!((((
>>> def f1(warehouse, item, req2): ... res_dic = {} ... i = item ... for x in i['stockByStore']: ... for product in req2: ... if x['name'] == warehouse and product['meta']['href'] == i['meta']['href']: ... res_dic['name'] = warehouse ... res_dic['product'] = product['name'] ... res_dic['stock'] = x['stock'] ... return res_dic ... >>> >>> def f(warehouse_list, req1, req2): ... res = [] ... for i in req1: ... for warehouse in warehouse_list: ... res1 = f1(warehouse, i, req2) ... res.append(res1) ... return res ... >>> >>> warehouse_list = ['КБ Советская','Кулой','Основной склад', 'Новый склад'] >>> >>> req1 = [ ... { ... "meta": { ... "href": '2ab2a8e1-06fc-11eb-0a80-09950026157e', ... "type": "product", ... "mediaType": "application/json", ... }, ... "stockByStore": [ ... { ... "meta": { ... "href": "cdf4e4d9-7960-11ea-0a80-02cc00015063", ... "type": "store", ... "mediaType": "application/json" ... }, ... "name": "КБ Советская", ... "stock": 12.075, ... "reserve": 0.0, ... "inTransit": 0.0 ... }, ... { ... "meta": { ... "href": "7acec394-7b04-11ea-0a80-01940002ba4f", ... "type": "store", ... "mediaType": "application/json" ... }, ... "name": "Кулой", ... "stock": 8.609, ... "reserve": 0.0, ... "inTransit": 0.0 ... }, ... { ... "meta": { ... "href": "89e15a69-7950-11ea-0a80-043900008c70", ... "type": "store", ... "mediaType": "application/json" ... }, ... "name": "Основной склад", ... "stock": 83.0, ... "reserve": 0.0, ... "inTransit": 0.0 ... }, ... { ... "meta": { ... "href": "89e15a69-7950-11ea-0a80-043900008c71", ... "type": "store", ... "mediaType": "application/json" ... }, ... "name": "Новый склад", ... "stock": 84.0, ... "reserve": 0.0, ... "inTransit": 0.0 ... } ... ] ... }, ... { ... "meta": { ... "href": "8ec23fae-904e-11ea-0a80-05660005a116", ... "type": "product", ... "mediaType": "application/json" ... }, ... "stockByStore": [ ... { ... "meta": { ... "href": "cdf4e4d9-7960-11ea-0a80-02cc00015063", ... "type": "store", ... "mediaType": "application/json" ... }, ... "name": "КБ Советская", ... "stock": 1.1, ... "reserve": 0.0, ... "inTransit": 0.0 ... }, ... { ... "meta": { ... "href": "7acec394-7b04-11ea-0a80-01940002ba4f", ... "type": "store", ... "mediaType": "application/json" ... }, ... "name": "Кулой", ... "stock": 0.0, ... "reserve": 0.0, ... "inTransit": 0.0 ... }, ... { ... "meta": { ... "href": "89e15a69-7950-11ea-0a80-043900008c70", ... "type": "store", ... "mediaType": "application/json" ... }, ... "name": "Основной склад", ... "stock": 23.0, ... "reserve": 0.0, ... "inTransit": 0.0 ... }, ... { ... "meta": { ... "href": "89e15a69-7950-11ea-0a80-043900008c71", ... "type": "store", ... "mediaType": "application/json" ... }, ... "name": "Новый склад", ... "stock": 84.0, ... "reserve": 0.0, ... "inTransit": 0.0 ... } ... ] ... } ... ] >>> >>> req2 = [ ... { ... "meta": { ... "href": "2ab2a8e1-06fc-11eb-0a80-09950026157e", ... "type": "product", ... "mediaType": "application/json" ... }, ... "stock": 103.684, ... "inTransit": 0.0, ... "reserve": 0.0, ... "quantity": 103.684, ... "name": "арахис в хрустящей корочке", ... "code": "00268", ... "price": 18000.0, ... "salePrice": 25000.0, ... "uom": { ... "meta": { ... "type": "uom", ... "mediaType": "application/json" ... }, ... "name": "кг" ... }, ... "externalCode": "WOywSqXtgrq3Wz0egCiQB2", ... "stockDays": 57.78 ... }, ... { ... "meta": { ... "href": "8ec23fae-904e-11ea-0a80-05660005a116", ... "type": "product", ... "mediaType": "application/json" ... }, ... "stock": 24.1, ... "inTransit": 0.0, ... "reserve": 0.0, ... "quantity": 24.1, ... "name": "арахис соленый", ... "code": "00166", ... "article": "арахис", ... "price": 16141.078838174273, ... "salePrice": 21500.0, ... "uom": { ... "meta": { ... "href": "2ec1170c-3f69-4409-87bb-c68e0011b275", ... "type": "uom", ... "mediaType": "application/json" ... }, ... "name": "кг" ... }, ... "externalCode": "vLXA07ARjLeF3vvs2LmeF2", ... "stockDays": 150.79 ... } ... ] >>> >>> out = f(warehouse_list, req1, req2) >>> print(out) [{'name': 'КБ Советская', 'product': 'арахис в хрустящей корочке', 'stock': 12.075}, {'name': 'Кулой', 'product': 'арахис в хрустящей корочке', 'stock': 8.609}, {'name': 'Основной склад', 'product': 'арахис в хрустящей корочке', 'stock': 83.0}, {'name': 'Новый склад', 'product': 'арахис в хрустящей корочке', 'stock': 84.0}, {'name': 'КБ Советская', 'product': 'арахис соленый', 'stock': 1.1}, {'name': 'Кулой', 'product': 'арахис соленый', 'stock': 0.0}, {'name': 'Основной склад', 'product': 'арахис соленый', 'stock': 23.0}, {'name': 'Новый склад', 'product': 'арахис соленый', 'stock': 84.0}] >>>
Офлайн
Мдеее((((( Красивенько и простенько, видимо совсем я туп, но не могу сообразить как ваш код теперь вписать в свой “ШЕДЕВЕР”
логика такая
def req1(url1,token):
return bystore(отсюда буду брать основные данные), prepare_list(отсюда буду делать список складов)
def req2(url2,token):
return stock_all(отсюда беру названия товара и его ID)
def warehouses_list():# получаем список складов(по именно) list_warehouse =[] res = warehouses(url1,token) for i in res[1]['stockByStore']: list_warehouse.append(i['name']) return list_warehouse def dic_goods():# создаем словарь ключ=имя товара, значение = id result = stockAll(url2,token) goods_id =[] for i in result: dic={} dic['name'] = i['name'] dic['id'] = i['meta']['href'] goods_id.append(dic) return goods_id def dic_warehouses(): # Создаем словарь ключи=имя склада,остаток,id_product req = warehouses(url1,token)[0] res_dic =[] warehause_list = warehouses_list() goods = dic_goods() for i in req: dic1 = {} dic2 = {} dic3 = {} for x in i['stockByStore']: for product in goods: if x['name'] == warehause_list[0] and product['id'] == i['meta']['href']: dic1['name'] = warehause_list[0] dic1['product'] = product['name'] dic1['stock'] = x['stock'] res_dic.append(dic1) for x in i['stockByStore']: for product in goods: if x['name'] == warehause_list[1] and product['id'] == i['meta']['href']: dic2['name'] = warehause_list[1] dic2['product'] = product['name'] dic2['stock'] = x['stock'] res_dic.append(dic2) for x in i['stockByStore']: for product in goods: if x['name'] == warehause_list[2] and product['id'] == i['meta']['href']: dic3['name'] = warehause_list[2] dic3['product'] = product['name'] dic3['stock'] = x['stock'] res_dic.append(dic3) return res_dic
Офлайн
keeper80Вот форма (шаблон) для построения
и не могу сообразить как все это сделать удобоваримо, и ваш код не могу сообразить как впихнуть
>>> def process_all(): ... warehouse_list = get_warehouse_list() ... req1 = get_req1() ... req2 = get_req2() ... out = join_all(warehouse_list, req1, req2) ... return out ... >>> def get_warehouse_list(): ... url = '... 1 ...' ... out = {'used url': url, 'gotten values': ['warehouse1', 'warehouse2', 'warehouseN']} ... return out ... >>> def get_req1(): ... url = '... 2 ...' ... out = {'used url': url, 'gotten value': 'req1'} ... return out ... >>> def get_req2(): ... url = '... 3 ...' ... out = {'used url': url, 'gotten value': 'req2'} ... return out ... >>> def join_all(a, b, c): ... out = ['joined values', (a, b, c)] ... return out ... >>> res = process_all() >>> print(res) ['joined values', ({'used url': '... 1 ...', 'gotten values': ['warehouse1', 'warehouse2', 'warehouseN']}, {'used url': '... 2 ...', 'gotten value': 'req1'}, {'used url': '... 3 ...', 'gotten value': 'req2'})] >>>
Офлайн
py.user.nextСпасибо, вроде как понятно, наверное!(((((
Офлайн
Если не секрет,о чем эта программа которую вы пишете?в чем она вам будет помогать?
Офлайн
keeper80Вот делай по этому шаблону, который я привёл. Может быть, тебе его хватит и всё получится в итоге. Как сделаешь максимум, который сможешь, выложишь сюда, я посмотрю, где ты там опять застрял.
вроде как понятно, наверное
Офлайн
py.user.nextНу вот и учусь, пока и в самом деле только тряпку получается накатать, а вот эту тряпку завернуть хотя бы в функции- уже крайне туго!((((((
Учись, само оно не придёт.
Офлайн