首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dict的预测秩值

Dict的预测秩值
EN

Stack Overflow用户
提问于 2016-08-29 12:04:56
回答 1查看 128关注 0票数 0

让我说我有个时间点

代码语言:javascript
复制
dict = {
'9': {'auth': '9', 'duration': 154.92},
'10': {'auth': '10', 'duration': 132.72},
'4': {'auth': '4', 'duration': 144.59}
}

我怎样才能用一个新的持续时间数,比如133.92,从dict中得到“秩”值。

它应该返回dict索引1,因为最上面的列表是:Auth-10\x_

133.92大于132.72,但小于144.59或154.92。

如果解释不清楚,我很抱歉,但我尽力了。

编辑:

我再试一次:我需要一个函数,该函数从排序列表/排序列表中返回自定义持续时间的“预测/排名”,并按“DESC/DESC”排序。因此,持续时间为160将返回最后一个位置,即4. (index+1)。120个持续时间应该返回第一个位置,即索引0或1 (index+1)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-29 13:00:27

正如@MartijnPieters所提到的,字典没有索引,但它们确实有键。下面的函数pred() (“前身”的缩写)返回持续时间最大的项的键,该项的持续时间是传递的持续时间的<=。如果传递的持续时间小于字典中的所有持续时间,则返回None (可以测试):

代码语言:javascript
复制
from bisect import bisect_left

def pred(duration, entries):
    entries = list(entries.items())
    entries.sort(key = lambda x: x[1]['duration'])
    durations = [x[1]['duration'] for x in entries]
    j = bisect_left(durations,duration)
    if j == 0:
        return None
    else:
        return entries[j-1][0]

例如,如果

代码语言:javascript
复制
d = {
'9': {'auth': '9', 'duration': 154.92},
'10': {'auth': '10', 'duration': 132.72},
'4': {'auth': '4', 'duration': 144.59}
}

(顺便说一句-不要使用dict作为标识符,因为它在Python中具有预定义的含义):

代码语言:javascript
复制
>>> pred(133.92,d)
'10'
>>> pred(149.92,d)
'4'
>>> pred(159.92,d)
'9'
>>> pred(129.92,d)
>>> 

请注意,

代码语言:javascript
复制
>>> pred(129.92,d) == None
True

On Edit:下面是相同思想的另一个变体,一个返回整数秩:

代码语言:javascript
复制
def rank(duration, entries):
    entries = list(entries.items())
    durations = sorted(x[1]['duration'] for x in entries)
    return bisect_left(durations,duration)

然后:

代码语言:javascript
复制
>>> rank(133.92,d)
1
>>> rank(129.92,d)
0

Final Edit:以一些可读性为代价,这里有一个1-liner:

代码语言:javascript
复制
def rank(duration, entries):
    return bisect_left(sorted(v['duration'] for v in entries.values()),duration)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39205925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档