Поиск в json, просмотр ответа и запись его в excel
Здраствуйте. Я делаю запрос к сайту и получаю ответ json. Как пример (не полный):
"AssetID": "1452cdc-2839-543e6-892a-c86356e4bb558",
"Title": "Silver Sword", # Это мне нужно вытащить
"Offer": {
"OfferID": "111",
"Price": {
"Currency": "Gold",
"Amount": 0.1 # Это добавить в ячейку для подсчёта общей стоимости всех таких же предметов
},
"Fee": null,
"CreatedDate": "1623766719"
},
"MarketPrice": null,
"InstantPrice": null,
"ClassID": "0:222"
},
Таких ответ = количеству предметов у меня в инвентаре. Они могу быть одинаковыми по ['Title']. Т.е если у меня 10 Silver Sword в инвентаре, то json ответ выдаст 10 блоков с одним и тем же ['Title']. Задача у меня стоит такая. Каждый найденный предмет с одинаковым названием не дублировать ниже, а просто прибавлять +1 к количеству в соседней строке excel. Как вариант делать это через:
if weapon.find('Silver Sword') != -1: # поиск по названию
sheet_active[row][4].value = 'Silver Swords' # запись в ячейку.
sheet_active[row][5].value = sum(weapon_price) # попытка суммировать сумму (неудачная)
И тогда повторной записи внизу не будет, но! В таком случае ячейка закрепляется за предметов и если она из инвентаря исчезнет, то в таблице будет пробел... Так же нужно в след. ячейку суммировать сумму этих предметов...
import json
import requests
from datetime import datetime
import openpyxl
r = requests.get(url4, headers=headers) # Offers Status
get_request = json.loads(r.text)
row = 3
for item in get_request['Items']:
weapon = item['Title']
weapon_price = item['Offer']['Price']['Amount']
if weapon.find('Silver Sword') != -1: # поиск по названию
sum = 0
sheet_active[row][4].value = 'Silver Swords' # запись в ячейку.
sheet_active[row][5].value = sum(weapon_price)
elif item in get_request['Items']:
row + 1
sum = 0
sheet_active[row][4].value = 'Gold Sword'
sheet_active[row][5].value = sum(weapon_price)
row + 1
Каким образом это должно выглядеть в excel:
ITEM Quantity Price
Silver Sword 3 #+1 за каждый найденный 0.2 # Просто цена, либо цена всех найденных предметов по названию. (не сильно важно)
Подскажите пожалуйста каким образом это лучше сделать...
Ответы (1 шт):
a = {"AssetID": "1452cdc-2839-543e6-892a-c86356e4bb558",
"Title": "Silver Sword",
"Offer": {
"OfferID": "111",
"Price": {
"Currency": "Gold",
"Amount": 0.1
},
"Fee": 'null',
"CreatedDate": "1623766719"
},
"MarketPrice": 'null',
"InstantPrice": 'null',
"ClassID": "0:222"
}, {"AssetID": "1452cdc-2839-543e6-892a-c86356e4bb558",
"Title": "Silver Sword",
"Offer": {
"OfferID": "111",
"Price": {
"Currency": "Gold",
"Amount": 0.2
},
"Fee": 'null',
"CreatedDate": "1623766719"
},
"MarketPrice": 'null',
"InstantPrice": 'null',
"ClassID": "0:222"
}, {"AssetID": "1452cdc-2839-543e6-892a-c86356e4bb558",
"Title": "Silver Sword",
"Offer": {
"OfferID": "111",
"Price": {
"Currency": "Gold",
"Amount": 0.3
},
"Fee": 'null',
"CreatedDate": "1623766719"
},
"MarketPrice": 'null',
"InstantPrice": 'null',
"ClassID": "0:222"
}, {"AssetID": "1452cdc-2839-543e6-892a-c86356e4bb558",
"Title": "Silver Sword",
"Offer": {
"OfferID": "111",
"Price": {
"Currency": "Gold",
"Amount": 0.4
},
"Fee": 'null',
"CreatedDate": "1623766719"
},
"MarketPrice": 'null',
"InstantPrice": 'null',
"ClassID": "0:222"
}, {"AssetID": "1452cdc-2839-543e6-892a-c86356e4bb558",
"Title": "Silver Sword 1",
"Offer": {
"OfferID": "111",
"Price": {
"Currency": "Gold",
"Amount": 0.4
},
"Fee": 'null',
"CreatedDate": "1623766719"
},
"MarketPrice": 'null',
"InstantPrice": 'null',
"ClassID": "0:222"
}, {"AssetID": "1452cdc-2839-543e6-892a-c86356e4bb558",
"Title": "Silver Sword 1",
"Offer": {
"OfferID": "111",
"Price": {
"Currency": "Gold",
"Amount": 0.4
},
"Fee": 'null',
"CreatedDate": "1623766719"
},
"MarketPrice": 'null',
"InstantPrice": 'null',
"ClassID": "0:222"
}, {"AssetID": "1452cdc-2839-543e6-892a-c86356e4bb558",
"Title": "Silver Sword 2",
"Offer": {
"OfferID": "111",
"Price": {
"Currency": "Gold",
"Amount": 0.7
},
"Fee": 'null',
"CreatedDate": "1623766719"
},
"MarketPrice": 'null',
"InstantPrice": 'null',
"ClassID": "0:222"
}, {"AssetID": "1452cdc-2839-543e6-892a-c86356e4bb558",
"Title": "Silver Sword 2",
"Offer": {
"OfferID": "111",
"Price": {
"Currency": "Gold",
"Amount": 0.6
},
"Fee": 'null',
"CreatedDate": "1623766719"
},
"MarketPrice": 'null',
"InstantPrice": 'null',
"ClassID": "0:222"
}
x = [] # создадим новый список
for i in a: # пройдёмся циклом по всем элементам
x.append({i['Title']: i['Offer']['Price']['Amount']}) # добавим в список словарь вида {Title: Amount}
print(x)
y = {}
for b in x:
for d, e in b.items():
if d in y: # если ключ (Title) уже есть в словаре
y[d] += e # прибавим к значению (Amount)
else:
y[d] = e # иначе добавим пару ключ: значение
print(y)
print('количество предметов:', len(y.items()))
print('общая стоимость предметов:', sum(y.values()))
[{'Silver Sword': 0.1}, {'Silver Sword': 0.2}, {'Silver Sword': 0.3}, {'Silver Sword': 0.4}, {'Silver Sword 1': 0.4}, {'Silver Sword 1': 0.4}, {'Silver Sword 2': 0.7}, {'Silver Sword 2': 0.6}]
{'Silver Sword': 1.0, 'Silver Sword 1': 0.8, 'Silver Sword 2': 1.2999999999999998}
количество предметов: 3
общая стоимость предметов: 3.0999999999999996