所以我正在建立一个股票查找项目的东西,我正在寻找包含全名子字符串的股票名称的股票代码。
例如,将Apple作为stockName传递将返回AAPL,因为Apple是Apple,Inc。的子串。对于Microsoft或Micros返回MSFT也是如此,因为Microsoft或Micros是Microsoft Corporation的子串。
这是我现有的代码,如果我输入子字符串,则返回错误:
def getStockTicker(stockName):
return companyTickers[companyNames.index(stockName)]
有没有人有任何想法?
编辑:我已处理错误,因此如果在companyNames中找不到任何内容,则返回ValueError
答案 0 :(得分:2)
我认为两个单独的名单,一个公司名称和一个公司股票代码,不是正确的数据结构。
您熟悉Python dict
吗?它将键映射到值。如果您使用公司名称作为密钥并使用股票代码作为值,则声明dict
将如下所示:
companies = {
'Apple, Inc.': 'AAPL',
'Microsoft Corporation': 'MSFT'
}
使用整个名称检索给定的股票代码符号如下:
companies['Apple, Inc.'] # returns 'AAPL'
至于根据子串检索代码,它是完全可行的。需要注意的一件事是:相同的子字符串可能匹配多个键,因此您希望返回可能匹配的列表,而不是第一个可能的匹配。
companies = {...}
def get_ticker_symbol(company):
return [value for key, value in companies.items() if company in key]
答案 1 :(得分:0)
stockName
会告诉您someFullString
是stockName
的子字符串。
鉴于此,您可以创建一个仅包含def getStockTicker(stockName):
for fullString in (s for s in companyNames if stockName in s):
return companyTickers[companyNames.index(fullString)]
# at this point, stockName is not a substring of anything in compagnyNames
return None # or raise an exception, or whatever
是其子串的字符串的生成器,并检索第一个的索引(如果有):
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
答案 2 :(得分:0)
除了迭代companyNames
并检查它是否包含stockName
之外别无他法。
def getStockTicker(stockName):
for index, companyName in enumerate(companyNames):
if stockName in companyName:
return companyTickers[index]