Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 3, 2017 13:56:20

mineevmikel
Зарегистрирован: 2017-11-03
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Извлечение данных из словаря

Доброго времени суток. Сразу к делу. Создаю словарь замен для обработки текста. d={'water':, ‘carbonate’:['car.', ‘carb’…}. Так вот я организую поиск по значениям и хочу чтобы вместо значений подставились ключи. Если бы одному ключу одно значение, то это просто. Со множественным соответствием питон просто виснет
Заранее спасибо.

Офлайн

#2 Ноя. 3, 2017 14:18:19

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Извлечение данных из словаря

mineevmikel
Со множественным соответствием питон просто виснет
виснет не питон, а ваш алгоритм, но вы нам его не показали. Поэтому могу помочь только так: бедненький, как же мне вас жаль!



Офлайн

#3 Дек. 9, 2020 11:36:22

keeper80
Зарегистрирован: 2020-09-25
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Извлечение данных из словаря

Всем доброго времени суток, у меня собственно схожая проблемма

 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 то как быть, всю голову сломал но не могу сообразить как выйти из этой ситуёвины!!((((

Офлайн

#4 Дек. 9, 2020 22:28:35

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Извлечение данных из словаря

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}]
>>>



Офлайн

#5 Дек. 11, 2020 10:47:05

keeper80
Зарегистрирован: 2020-09-25
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Извлечение данных из словаря

Мдеее((((( Красивенько и простенько, видимо совсем я туп, но не могу сообразить как ваш код теперь вписать в свой “ШЕДЕВЕР”
логика такая
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
Вот не нравиться мне все это, аж затряхивает, и не могу сообразить как все это сделать удобоваримо, и ваш код не могу сообразить как впихнуть-та же трабла(АРГУМЕНТЫ)!!!((((((((((

Офлайн

#6 Дек. 11, 2020 11:32:22

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Извлечение данных из словаря

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'})]
>>>



Офлайн

#7 Дек. 11, 2020 18:05:44

keeper80
Зарегистрирован: 2020-09-25
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Извлечение данных из словаря

py.user.next
Спасибо, вроде как понятно, наверное!(((((

Офлайн

#8 Дек. 11, 2020 18:28:37

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1308
Репутация: +  112  -
Профиль   Отправить e-mail  

Извлечение данных из словаря

Если не секрет,о чем эта программа которую вы пишете?в чем она вам будет помогать?

Офлайн

#9 Дек. 12, 2020 06:22:33

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Извлечение данных из словаря

keeper80
вроде как понятно, наверное
Вот делай по этому шаблону, который я привёл. Может быть, тебе его хватит и всё получится в итоге. Как сделаешь максимум, который сможешь, выложишь сюда, я посмотрю, где ты там опять застрял.

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

Если уж ты собрался сам программировать, то должен знать, что программирование - это не написание кода. Программирование - это проектирование алгоритма, а потом уже написание реализации этого спроектированного алгоритма в виде кода. И нужно уметь делать как первое, так и второе. И первое может быть сложным и этому надо учиться, и второе может быть сложным и этому надо учиться. То есть ты должен уметь две вещи, а не одну. Поэтому когда ты пытаешься просто написать код, у тебя ничего не получается. Ты вот этот первый этап пропустил и не умеешь его делать вообще. Учись, само оно не придёт.



Офлайн

#10 Дек. 12, 2020 10:40:07

keeper80
Зарегистрирован: 2020-09-25
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Извлечение данных из словаря

py.user.next
Учись, само оно не придёт.
Ну вот и учусь, пока и в самом деле только тряпку получается накатать, а вот эту тряпку завернуть хотя бы в функции- уже крайне туго!((((((

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version