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

时间:2017-09-28 14:29:46

标签: python dictionary

我正在尝试使用字典中的独特股票代码和他们各自的S& P 500的市值。我正在添加一个额外的股票代码(让我们称之为股票代码),我的最终目标是定义一个变量如果添加了STACK,那么S& P 500中的下一个最大的自动收报机。我已经拥有了数据库,并添加了' STACK'但是,我不确定如何正确管理它。

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的市值为73.65M,我会打印" AGN"因为AGN的市值可能是下一个最高的73.64M。

以上回报: Traceback(最近一次调用最后一次):     如果x == [stackrank + 1]: TypeError:+的不支持的操作数类型:' builtin_function_or_method'和' int'

提前致谢。

1 个答案:

答案 0 :(得分:1)

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

private static void mainInit() {
 // do some init stuff here...(and show it to the user)

 Alert alert = new Alert(AlertType.INFORMATION);
 // program never reaches this line...
 alert.setTitle("Hallo");
}


public void start(Stage primaryStage) {
  Task<Void> initTask = new Task<Void>() {
    @Override
    protected Void call() throws Exception {
      mainInit();
      return null;
    }
  };
  new Thread(initTask).start();
}

这将打印: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