Python 按值对字典排序、枚举并返回预定项中的下一个最大项

Python 按值对字典排序、枚举并返回预定项中的下一个最大项,python,dictionary,Python,Dictionary,我正在尝试使用一本关于统一股票代码的词典,以及它们各自的标准普尔500指数市值。我正在添加一个额外的ticker,我们称之为ticker STACK,我的最终目标是定义一个变量,如果将STACK添加到该变量中,则该变量将是标准普尔500指数中下一个最大的ticker。我已经有了数据库并添加了“堆栈”,但是,我不确定如何正确管理它 database = {u'AGN': 73.64, u'EOG': 53.83, u'CPB': 14.77, u'EVHC': 5.86, u'IDXX': 13

我正在尝试使用一本关于统一股票代码的词典,以及它们各自的标准普尔500指数市值。我正在添加一个额外的ticker,我们称之为ticker STACK,我的最终目标是定义一个变量,如果将STACK添加到该变量中,则该变量将是标准普尔500指数中下一个最大的ticker。我已经有了数据库并添加了“堆栈”,但是,我不确定如何正确管理它

database = {u'AGN': 73.64, u'EOG': 53.83, u'CPB': 14.77, u'EVHC': 5.86, 
u'IDXX': 13.87, u'QRVO': 9.61, u'JWN': 7.77, u'SBAC': 18.05, u'JBHT': 
11.12, u'TAP': 17.03, u'VRTX': 38.73, u'BWA': 10.29....and so on}

for x, y in database.items():  #finds the market cap of STACK
    if x == "STACK":
        stackcap = y

new = list(enumerate(sorted(database.values(), reverse= True)))

print new

#This prints like this: [(0, 474.03), (1, 406.84), (2, 360.86), (3, 
339.27), (4, 322.41), (5, 320.01), (6, 278.76)...etc.]

for x, y in new.items():
    if stackcap == y:
        stackrank = x
    if x == [stackrank+1]:
        nextcap = y

print nextcap
例如,如果STACK的市值为7365万美元,我想打印AGN,因为AGN的市值可能是第二大,为7364万美元

上述申报表: 回溯最近一次呼叫上次: 如果x==[stackrank+1]: TypeError:不支持+:“内置函数或方法”和“int”的操作数类型


提前感谢。

如果我理解正确,您的目标是找到最大上限小于堆栈上限的股票代码?如果是这样,则可以收集满足此约束的股票代码,并获取其上限的最大值:

database = {
    u'AGN': 73.64, u'EOG': 53.83, u'CPB': 14.77, u'EVHC': 5.86, 
    u'IDXX': 13.87, u'QRVO': 9.61, u'JWN': 7.77, u'SBAC': 18.05, 
    u'JBHT': 11.12, u'TAP': 17.03, u'VRTX': 38.73, u'BWA': 10.29,
    u'STACK': 73.65
    }


below_stack = ((t, c) for t, c in database.items() if c < database['STACK'])
next_cap = max(below_stack, key=lambda item: item[1])
print next_cap

这将打印:“AGN”,73.64。

为什么不使用stackcap=database['STACK']?您的第二条if语句完全不依赖于第一条语句。因此,如果第一条语句为falseJBernardo-Good point.1,则会导致错误-我无法在if语句中定义变量。现在说的是“stackrank”没有定义。有什么建议吗?@Muricuda应该和stackrank=xYou,genius,you,缩进到同一级别,。