Python Forum

Full Version: Search a List of Dictionaries by Key-Value Pair; Return Dictionary/ies Containing KV
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2
Bittrex_Markets = requests.get("https://api.bittrex.com/api/v1.1/public/getmarkets").json()

print (Bittrex_Markets)

>>>


Editing post it was way too long first time
#!/usr/bin/python3
import requests, pprint

url = "https://api.bittrex.com/api/v1.1/public/getmarkets"

rsp = requests.get(url)
if rsp.status_code == 200:
    json_data = rsp.json()
    pprint.pprint(json_data)
else:
    print("ERROR:", rsp.status_code)
    print(rsp.text)
Output:
{'message': '', 'result': [{'BaseCurrency': 'BTC', 'BaseCurrencyLong': 'Bitcoin', 'Created': '2014-02-13T00:00:00', 'IsActive': True, 'IsRestricted': False, 'IsSponsored': None, 'LogoUrl': 'https://bittrexblobstorage.blob.core.windows.net/public/6defbc41-582d-47a6-bb2e-d0fa88663524.png', 'MarketCurrency': 'LTC', 'MarketCurrencyLong': 'Litecoin', 'MarketName': 'BTC-LTC', 'MinTradeSize': 0.01686767, 'Notice': None }, ... ... ...
Bittrex_Markets = requests.get("https://api.bittrex.com/api/v1.1/public/getmarkets").json()

Print (Bittrex_Markets)
>>>
{'success': True, 'message': '', 'result': [{'MarketCurrency': 'LTC', 'BaseCurrency': 'BTC', 'MarketCurrencyLong': 'Litecoin', 'BaseCurrencyLong': 'Bitcoin', 'MinTradeSize': 0.01686767, 'MarketName': 'BTC-LTC', 'IsActive': True, 'IsRestricted': False, 'Created': '2014-02-13T00:00:00', 'Notice': None, 'IsSponsored': None, 'LogoUrl': 'https://bittrexblobstorage.blob.core.windows.net/public/6defbc41-582d-47a6-bb2e-d0fa88663524.png'}, {'MarketCurrency': 'DOGE', 'BaseCurrency': 'BTC', 'MarketCurrencyLong': 'Dogecoin', 'BaseCurrencyLong': 'Bitcoin', 'MinTradeSize': 480.76923077, 'MarketName': 'BTC-DOGE', 'IsActive': True, 'IsRestricted': False, 'Created': '2014-02-13T00:00:00', 'Notice': None, 'IsSponsored': None, 'LogoUrl': 'https://bittrexblobstorage.blob.core.windows.net/public/a2b8eaee-2905-4478-a7a0-246f212c64c6.png'}, {'MarketCurrency': 'VDX', 'BaseCurrency': 'ETH', 'MarketCurrencyLong': 'Vodi X', 'BaseCurrencyLong': 'Ethereum', 'MinTradeSize': 300.0, 'MarketName': 'ETH-VDX', 'IsActive': True, 'IsRestricted': True, 'Created': '2019-05-23T00:41:32.987', 'Notice': None, 'IsSponsored': None, 'LogoUrl': 'https://bittrexblobstorage.blob.core.windows.net/public/3277e3cb-fe62-46df-9162-3d9ba67c521e.png'}]}




Bittrex_Get_Market_Summaries = requests.get("https://api.bittrex.com/api/v1.1/public/getmarketsummaries").json()

Print (Bittrex_Get_Market_Summaries)
>>>
{'success': True, 'message': '', 'result': [{'MarketName': 'BTC-DYN', 'High': 1.657e-05, 'Low': 1.437e-05, 'Volume': 83445.47466841, 'Last': 1.468e-05, 'BaseVolume': 1.27935571, 'TimeStamp': '2019-05-28T07:18:48.797', 'Bid': 1.437e-05, 'Ask': 1.461e-05, 'OpenBuyOrders': 42, 'OpenSellOrders': 738, 'PrevDay': 1.445e-05, 'Created': '2017-03-23T00:10:19.403'}, {'MarketName': 'USD-USDT', 'High': 1.009, 'Low': 1.00095, 'Volume': 283483.08497639, 'Last': 1.005, 'BaseVolume': 284948.3504794, 'TimeStamp': '2019-05-28T07:18:48.797', 'Bid': 1.002, 'Ask': 1.00481, 'OpenBuyOrders': 162, 'OpenSellOrders': 97, 'PrevDay': 1.00899, 'Created': '2018-05-31T13:27:08.477'}]}



Bittrex_Mrkt_0 = ((Bittrex_Markets)['result'][0])

Print (Bittrex_Mrkt_0)
>>>
{'MarketCurrency': 'LTC', 'BaseCurrency': 'BTC', 'MarketCurrencyLong': 'Litecoin', 'BaseCurrencyLong': 'Bitcoin', 'MinTradeSize': 0.01686767, 'MarketName': 'BTC-LTC', 'IsActive': True, 'IsRestricted': False, 'Created': '2014-02-13T00:00:00', 'Notice': None, 'IsSponsored': None, 'LogoUrl': 'https://bittrexblobstorage.blob.core.windows.net/public/6defbc41-582d-47a6-bb2e-d0fa88663524.png'}


Bittrex_Mrkt_Summary_0 = ((Bittrex_Get_Market_Summaries)['result'][0])

Print (Bittrex_Mrkt_Summary_0)
>>>
{'MarketName': 'BTC-DYN', 'High': 1.657e-05, 'Low': 1.437e-05, 'Volume': 83445.47466841, 'Last': 1.468e-05, 'BaseVolume': 1.27935571, 'TimeStamp': '2019-05-28T07:18:48.797', 'Bid': 1.437e-05, 'Ask': 1.461e-05, 'OpenBuyOrders': 42, 'OpenSellOrders': 738, 'PrevDay': 1.445e-05, 'Created': '2017-03-23T00:10:19.403'}


if ((Bittrex_Mrkt_0)['IsActive']) == True:
if ((Bittrex_Mrkt_0['IsRestricted'])) == False:
THEN HERE:


I need to return a dictionary from the list of dictionaries in Bittrex_Get_Market_Summaries, and I need to find that dictionary not by its index value but by it containing a 'MarketName': key value.

('\''+(Bittrex_Mrkt_0)['BaseCurrency']+'-'+(Bittrex_Mrkt_0)['MarketCurrency']+'\'')
'BTC-LTC'

That could be inserted after 'MarketName': but I don't know what to do beyond that. I'm still very new to Python. Maybe a for loop is what I'm looking for here?

In other words: I need information from BOTH of those links.

The first link gives the Active True/False and IsRestricted True/False information to the if statements.

Based on that, the Bid and Ask values are going to be pulled next for the same BTC-LTC pair.

So I can't go by the index in the list since they are totally different and will always possibly change.

I have to use 'BTC-LTC' as a way to search the second list of dictionaires, NOT the index.
Do you want this ?

#!/usr/bin/python3
import sys, pprint, requests

url = "https://api.bittrex.com/api/v1.1/public/getmarkets"
rsp = requests.get(url)
if rsp.status_code == 200:
    markets = rsp.json()["result"]
    #pprint.pprint(markets)
else:
    print("ERROR:", rsp.status_code)
    print(rsp.text)
    sys.exit(1)

url = "https://api.bittrex.com/api/v1.1/public/getmarketsummaries"
rsp = requests.get(url)
if rsp.status_code == 200:
    markets_sum = rsp.json()["result"]
    #pprint.pprint(markets_sum)
else:
    print("ERROR:", rsp.status_code)
    print(rsp.text)
    sys.exit(1)

for market in markets:
    if market['IsActive'] == True  and  market['IsRestricted'] == False:
        ticker = market['BaseCurrency'] + '-' + market['MarketCurrency']
        print(ticker, end="")
        for market_sum in markets_sum:
            if ticker == market_sum['MarketName']:
                print(" found", end="")
                break
        print(".")
#done
Output:
BTC-LTC found BTC-DOGE found. BTC-VTC found. BTC-PPC found. BTC-FTC found. BTC-RDD found. BTC-NXT found. ... ... ...
I'm really grateful for someone trying to understand that mess of a post I made earlier but I think I was more tired than I realized and just posted a confusing mess lol.

That's not what I am looking for.

I need to search Bittrex_Get_Market_Summaries for 'MarketName': 'BTC-LTC' rather than index 0.

How do I do that?

Also what gets returned should be the entire dictionary containing 'MarketName': 'BTC-LTC'.

So I need to search through all of Bittrex_Get_Market_Summaries for a dictionary containing the key value 'MarketName': 'BTC-LTC' and have that dictionary print or whatever.
I thought I have done this:

 
for market in markets:
    if market['IsActive'] == True  and  market['IsRestricted'] == False:
        ticker = market['BaseCurrency'] + '-' + market['MarketCurrency']
        print(ticker, end="")
        for market_sum in markets_sum:
            if ticker == market_sum['MarketName']:
                print(" found", end="")
                break
        print(".")
(May-28-2019, 12:49 PM)heiner55 Wrote: [ -> ]I thought I have done this:

 
for market in markets:
    if market['IsActive'] == True  and  market['IsRestricted'] == False:
        ticker = market['BaseCurrency'] + '-' + market['MarketCurrency']
        print(ticker, end="")
        for market_sum in markets_sum:
            if ticker == market_sum['MarketName']:
                print(" found", end="")
                break
        print(".")

Maybe I just don't understand that code but the output seems different than what I'm needing.

The IsActive and IsRestricted comes from Bittrex_Markets.

So if say BTC-LTC is True and False for those, then I need to search Bittrex_Get_Market_Summaries for a dictionary containing the key value 'MarketName': 'BTC-LTC' to print that entire dictionary.

This next bit is unrelated, but once I have that entire dictionary I will be using the bid and ask from it.

I don't need code just saying if any of them are found or not. If say 'BTC-LTC' is both True and False, I already know it is somewhere in the second variable Bittrex_Get_Market_Summaries.

I think it may be what I need. I think found can be changed to return the dictionary. I'm very new to Python so I apologize for being inept.
#!/usr/bin/python3
import sys, pprint, requests

url = "https://api.bittrex.com/api/v1.1/public/getmarkets"
rsp = requests.get(url)
if rsp.status_code == 200:
    markets = rsp.json()["result"]
    #pprint.pprint(markets)
else:
    print("ERROR:", rsp.status_code)
    print(rsp.text)
    sys.exit(1)

url = "https://api.bittrex.com/api/v1.1/public/getmarketsummaries"
rsp = requests.get(url)
if rsp.status_code == 200:
    markets_sum = rsp.json()["result"]
    #pprint.pprint(markets_sum)
else:
    print("ERROR:", rsp.status_code)
    print(rsp.text)
    sys.exit(1)

for market in markets:
    if market['IsActive'] == True  and  market['IsRestricted'] == False:
        ticker = market['BaseCurrency'] + '-' + market['MarketCurrency']
        #print(ticker)
        for market_sum in markets_sum:
            if ticker == market_sum['MarketName']:
                print(market_sum)
                break
        print()
#done
Output:
{'MarketName': 'BTC-LTC', 'High': 0.01369299, 'Low': 0.012833, 'Volume': 15403.75712871, 'Last': 0.01303875, 'BaseVolume': 202.53076032, 'TimeStamp': '2019-05-28T13:06:06.417', 'Bid': 0.01305114, 'Ask': 0.01308828, 'OpenBuyOrders': 1357, 'OpenSellOrders': 2551, 'PrevDay': 0.01312497, 'Created': '2014-02-13T00:00:00'} {'MarketName': 'BTC-DOGE', 'High': 3.7e-07, 'Low': 3.5e-07, 'Volume': 144129157.7164047, 'Last': 3.6e-07, 'BaseVolume': 51.59121297, 'TimeStamp': '2019-05-28T13:06:06.417', 'Bid': 3.5e-07, 'Ask': 3.6e-07, 'OpenBuyOrders': 926, 'OpenSellOrders': 7806, 'PrevDay': 3.6e-07, 'Created': '2014-02-13T00:00:00'} {'MarketName': 'BTC-VTC', 'High': 6.227e-05, 'Low': 5.258e-05, 'Volume': 302652.42840458, 'Last': 5.654e-05, 'BaseVolume': 17.38637312, 'TimeStamp': '2019-05-28T13:06:06.417', 'Bid': 5.654e-05, 'Ask': 5.674e-05, 'OpenBuyOrders': 251, 'OpenSellOrders': 4193, 'PrevDay': 5.712e-05, 'Created': '2014-02-13T00:00:00'} ... ... ...
That's what I've been trying to figure out how to do! Thanks! You're awesome! I will study for loops more now to understand this better.
Super. Here the latest code:

#!/usr/bin/python3
import sys, pprint, requests

# get data1
url = "https://api.bittrex.com/api/v1.1/public/getmarkets"
rsp = requests.get(url)
if rsp.status_code == 200:
    markets = rsp.json()["result"]
    #pprint.pprint(markets)
else:
    print("ERROR:", rsp.status_code)
    print(rsp.text)
    sys.exit(1)

# get data2
url = "https://api.bittrex.com/api/v1.1/public/getmarketsummaries"
rsp = requests.get(url)
if rsp.status_code == 200:
    marketsummaries = rsp.json()["result"]
    #pprint.pprint(marketsummaries)
else:
    print("ERROR:", rsp.status_code)
    print(rsp.text)
    sys.exit(1)

# find all tickers which are active and not restricted
list_found = [ ]
for market in markets:
    if market['IsActive'] == True  and  market['IsRestricted'] == False:
        ticker = market['BaseCurrency'] + '-' + market['MarketCurrency']
        for marketsummary in marketsummaries:
            if ticker == marketsummary['MarketName']:
                list_found += [ marketsummary ]
                break

# do something with list
pprint.pprint(list_found)

#done
Output:
[{'Ask': 0.01307497, 'BaseVolume': 201.9121671, 'Bid': 0.0130465, 'Created': '2014-02-13T00:00:00', 'High': 0.01369299, 'Last': 0.01307505, 'Low': 0.012833, 'MarketName': 'BTC-LTC', 'OpenBuyOrders': 1354, 'OpenSellOrders': 2553, 'PrevDay': 0.01307419, 'TimeStamp': '2019-05-28T13:22:21.84', 'Volume': 15356.44572863}, {'Ask': 3.6e-07, 'BaseVolume': 51.37509171, 'Bid': 3.5e-07, 'Created': '2014-02-13T00:00:00', 'High': 3.7e-07, 'Last': 3.5e-07, 'Low': 3.5e-07, 'MarketName': 'BTC-DOGE', 'OpenBuyOrders': 933, 'OpenSellOrders': 7804, 'PrevDay': 3.6e-07, 'TimeStamp': '2019-05-28T13:22:21.84', 'Volume': 143504743.7629786}, ... ... ...
Pages: 1 2