Найти - Пользователи
Полная версия: Извлечение данных из словаря
Начало » Data Mining » Извлечение данных из словаря
1 2
mineevmikel
Доброго времени суток. Сразу к делу. Создаю словарь замен для обработки текста. d={'water':, ‘carbonate’:['car.', ‘carb’…}. Так вот я организую поиск по значениям и хочу чтобы вместо значений подставились ключи. Если бы одному ключу одно значение, то это просто. Со множественным соответствием питон просто виснет
Заранее спасибо.
FishHook
mineevmikel
Со множественным соответствием питон просто виснет
виснет не питон, а ваш алгоритм, но вы нам его не показали. Поэтому могу помочь только так: бедненький, как же мне вас жаль!
keeper80
Всем доброго времени суток, у меня собственно схожая проблемма
 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
      }
    ]
  }
]
и есть 2-ой словарик
 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)
вот таким вот угобищном способом( переменная warehouse в ней создал список)
но вот если добавиться еще один warehouse то как быть, всю голову сломал но не могу сообразить как выйти из этой ситуёвины!!((((
py.user.next
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}]
>>>
keeper80
Мдеее((((( Красивенько и простенько, видимо совсем я туп, но не могу сообразить как ваш код теперь вписать в свой “ШЕДЕВЕР”
логика такая
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
Вот не нравиться мне все это, аж затряхивает, и не могу сообразить как все это сделать удобоваримо, и ваш код не могу сообразить как впихнуть-та же трабла(АРГУМЕНТЫ)!!!((((((((((
py.user.next
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'})]
>>>
keeper80
py.user.next
Спасибо, вроде как понятно, наверное!(((((
xam1816
Если не секрет,о чем эта программа которую вы пишете?в чем она вам будет помогать?
py.user.next
keeper80
вроде как понятно, наверное
Вот делай по этому шаблону, который я привёл. Может быть, тебе его хватит и всё получится в итоге. Как сделаешь максимум, который сможешь, выложишь сюда, я посмотрю, где ты там опять застрял.

Здесь описан метод разработки “сверху вниз”.
Здесь можешь посмотреть пример разработки по методу “сверху вниз”.

Если уж ты собрался сам программировать, то должен знать, что программирование - это не написание кода. Программирование - это проектирование алгоритма, а потом уже написание реализации этого спроектированного алгоритма в виде кода. И нужно уметь делать как первое, так и второе. И первое может быть сложным и этому надо учиться, и второе может быть сложным и этому надо учиться. То есть ты должен уметь две вещи, а не одну. Поэтому когда ты пытаешься просто написать код, у тебя ничего не получается. Ты вот этот первый этап пропустил и не умеешь его делать вообще. Учись, само оно не придёт.
keeper80
py.user.next
Учись, само оно не придёт.
Ну вот и учусь, пока и в самом деле только тряпку получается накатать, а вот эту тряпку завернуть хотя бы в функции- уже крайне туго!((((((
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB