如何获取列表和字典的键
我正在使用streamlit来展示我的数据框结果。
我有一段代码可以通过market.values()和timeframes.values()来选择市场和时间段。
timeframes = {
'daily':'Daily',
'weekly':'Weekly',
'monthly':'Monthly',
'quarterly':'Quarterly',
'annually':'Annually'
}
markets = {
'forex':{'Market':'Forex','Symbol':'EURUSD=X.csv','Continent':'World','Currency':'USD'},
'crypto':{'Market':'Crypto','Symbol':'BTC-USD.csv','Continent':'World','Currency':'USD'},
'futures':{'Market':'Futures','Symbol':'CL=F.csv','Continent':'World','Currency':'USD'},
'indexes':{'Market':'Indexes','Symbol':'^NDX.csv','Continent':'World','Currency':'USD'},
'etfs':{'Market':'ETFs','Symbol':'SPY.csv','Continent':'World','Currency':'USD'},
'australia':{'Market':'Australian Stocks','Symbol':'BHP.AX.csv','Continent':'Oceania','Currency':'AUD'},
'canada':{'Market':'Canadian Stocks','Symbol':'RY.TO.csv','Continent':'North America','Currency':'CAD'},
'china':{'Market':'Chinese Stocks','Symbol':'600519.SS.csv','Continent':'Asia','Currency':'CNY'},
'france':{'Market':'French Stocks','Symbol':'MC.PA.csv','Continent':'Europe','Currency':'EUR'},
'germany':{'Market':'German Stocks','Symbol':'SAP.DE.csv','Continent':'Europe','Currency':'EUR'},
'hongkong':{'Market':'Hong Kong Stocks','Symbol':'0941.HK.csv','Continent':'Asia','Currency':'HKD'},
'india':{'Market':'Indian Stocks','Symbol':'RELIANCE.NS.csv','Continent':'Asia','Currency':'INR'},
'italy':{'Market':'Italian Stocks','Symbol':'RACE.MI.csv','Continent':'Europe','Currency':'EUR'},
'japan':{'Market':'Japanese Stocks','Symbol':'7203.T.csv','Continent':'Asia','Currency':'JPY'},
'singapore':{'Market':'Singapore Stocks','Symbol':'D05.SI.csv','Continent':'Asia','Currency':'SGD'},
'spain':{'Market':'Spanish Stocks','Symbol':'ITX.MC.csv','Continent':'Europe','Currency':'EUR'},
'swiss':{'Market':'Swiss Stocks','Symbol':'NESN.SW.csv','Continent':'Europe','Currency':'CHF'},
'unitedarabemirates':{'Market':'UAE Stocks','Symbol':'DEWA.AE.csv','Continent':'Asia','Currency':'AED'},
'unitedkingdom':{'Market':'UK Stocks','Symbol':'AZN.L.csv','Continent':'Europe','Currency':'GBP'},
'unitedstates':{'Market':'US Stocks','Symbol':'AAPL.csv','Continent':'North America','Currency':'USD'},
'test':{'Market':'Test','Symbol':'AAPL.csv','Continent':'North America','Currency':'USD'}
}
selected_markets = st.multiselect(label='Market',options=list(markets.values()),default=list(markets.values()))
selected_timeframes = st.multiselect(label='Timeframe',options=list(timeframes.values()),default=list(timeframes.values()))
然后我有另一段代码用来读取每个选定的市场和时间段的数据csv文件。
for selected_market in selected_markets:
for selected_timeframe in selected_timeframes:
df = pd.read_csv('{}'.format("data/" + selected_market + "_" + selected_timeframe + ".csv"))
我遇到一个问题,因为在循环中,"selected_market"和"selected_timeframe"的值分别是"Australian Stocks"和"Daily",但是文件"Australian Stocks_Daily.csv"并不存在,我实际上有一个文件叫"australia_daily.csv"。我不知道怎么把"selected_market"和"selected_timeframe"分别对应到"market"列表和"timeframes"列表中的键。
有没有什么办法可以解决这个问题?非常感谢。
2 个回答
0
使用一个查找的 字典
。
markets_lookup = { val['Market']: key for key, val in markets.items()}
for selected_market in selected_markets:
for selected_timeframe in selected_timeframes:
key = markets_lookup[selected_market]
df = pd.read_csv(f"data/{key}_{selected_timeframe.lower()}.csv"))
我无法测试这段代码,如果有错误请告诉我。
编辑:
markets = {
'forex':{'Market':'Forex','Symbol':'EURUSD=X.csv','Continent':'World','Currency':'USD'},
'crypto':{'Market':'Crypto','Symbol':'BTC-USD.csv','Continent':'World','Currency':'USD'},
'futures':{'Market':'Futures','Symbol':'CL=F.csv','Continent':'World','Currency':'USD'},
'indexes':{'Market':'Indexes','Symbol':'^NDX.csv','Continent':'World','Currency':'USD'},
'etfs':{'Market':'ETFs','Symbol':'SPY.csv','Continent':'World','Currency':'USD'},
'australia':{'Market':'Australian Stocks','Symbol':'BHP.AX.csv','Continent':'Oceania','Currency':'AUD'},
'canada':{'Market':'Canadian Stocks','Symbol':'RY.TO.csv','Continent':'North America','Currency':'CAD'},
'china':{'Market':'Chinese Stocks','Symbol':'600519.SS.csv','Continent':'Asia','Currency':'CNY'},
'france':{'Market':'French Stocks','Symbol':'MC.PA.csv','Continent':'Europe','Currency':'EUR'},
'germany':{'Market':'German Stocks','Symbol':'SAP.DE.csv','Continent':'Europe','Currency':'EUR'},
'hongkong':{'Market':'Hong Kong Stocks','Symbol':'0941.HK.csv','Continent':'Asia','Currency':'HKD'},
'india':{'Market':'Indian Stocks','Symbol':'RELIANCE.NS.csv','Continent':'Asia','Currency':'INR'},
'italy':{'Market':'Italian Stocks','Symbol':'RACE.MI.csv','Continent':'Europe','Currency':'EUR'},
'japan':{'Market':'Japanese Stocks','Symbol':'7203.T.csv','Continent':'Asia','Currency':'JPY'},
'singapore':{'Market':'Singapore Stocks','Symbol':'D05.SI.csv','Continent':'Asia','Currency':'SGD'},
'spain':{'Market':'Spanish Stocks','Symbol':'ITX.MC.csv','Continent':'Europe','Currency':'EUR'},
'swiss':{'Market':'Swiss Stocks','Symbol':'NESN.SW.csv','Continent':'Europe','Currency':'CHF'},
'unitedarabemirates':{'Market':'UAE Stocks','Symbol':'DEWA.AE.csv','Continent':'Asia','Currency':'AED'},
'unitedkingdom':{'Market':'UK Stocks','Symbol':'AZN.L.csv','Continent':'Europe','Currency':'GBP'},
'unitedstates':{'Market':'US Stocks','Symbol':'AAPL.csv','Continent':'North America','Currency':'USD'},
'test':{'Market':'Test','Symbol':'AAPL.csv','Continent':'North America','Currency':'USD'}
}
markets_lookup = {val['Market']: key for key, val in markets.items()}
print(markets_lookup)
输出结果:
{'Forex': 'forex', 'Crypto': 'crypto', 'Futures': 'futures', 'Indexes': 'indexes', 'ETFs': 'etfs', 'Australian Stocks': 'australia', 'Canadian Stocks': 'canada', 'Chinese Stocks': 'china', 'French Stocks': 'france', 'German Stocks': 'germany', 'Hong Kong Stocks': 'hongkong', 'Indian Stocks': 'india', 'Italian Stocks': 'italy', 'Japanese Stocks': 'japan', 'Singapore Stocks': 'singapore', 'Spanish Stocks': 'spain', 'Swiss Stocks': 'swiss', 'UAE Stocks': 'unitedarabemirates', 'UK Stocks': 'unitedkingdom', 'US Stocks': 'unitedstates', 'Test': 'test'}
0
试着修改代码,在构建读取CSV文件的文件路径时,使用来自市场和时间框架字典的键。
for selected_market in selected_markets:
for selected_timeframe in selected_timeframes:
# Construct the filename using keys
filename = "{}_{}.csv".format(markets[selected_market]['Symbol'], selected_timeframe.lower())
file_path = os.path.join("data", filename)
if os.path.exists(file_path):
# Read the CSV file
df = pd.read_csv(file_path)
# Process your dataframe as needed
else:
st.warning(f"File not found: {file_path}")