如何从字典中获取排名列表?

时间:2016-02-07 06:08:25

标签: python dictionary

我在Python工作。我的字典看起来像这样:

score = {'a':{4:'c', 3:'d'}, 'b':{6:'c', 3:'d'}}

我需要这样订购:

rank = [{a:3, b:6}, {a:4, b:3}]

在具有排他键值的最大组合的子字典在第一元素中的情况下,排他键值的第二大组合在第二元素中,依此类推。最大的组合逻辑是:1。从每个字典中获取最大组合键(总和)(在这种情况下,它将是a-> 4:'c'和b-> 6:'d'。删除来自字典的那些值并抓住下一个最大的键组合(在这种情况下,它将是a-> 4:'c'和b-> 3:'d')。这应该继续直到原始字典是空。

它是独占的,因为一旦从原始字典中使用了一次值,就应将其删除,或排除在以后的任何组合中再次使用。

我尝试过所有我认识的不同方法,但在算法上我错过了一些东西。

1 个答案:

答案 0 :(得分:1)

我做了你正在寻找的东西?这是一个奇怪的算法,由于try / except块,它有点脏,但它有效。

编辑:添加评论并删除不需要的代码。

def rank(toSort):
    #importing from the string library
    from string import lowercase as alph

    #temporary list
    _ranks=[]

    #populate with empty dictonaries
    for i in range(len(toSort)):
        _ranks.append({})

    #the actual sorting algorithm
    for i in range(len(toSort)-1):
        #iterate all k/v pairs in the supplied dictionary
        for k,v in toSort.iteritems():
            #iterate all k/v pairs in v element
            for a,b in v.iteritems():
                #if the alpha index of an element is equal to
                #the max alpha index of elements in its containing dictionary...
                if alph.index(b)==max(map(alph.index,v.values())):
                    _ranks[i][k]=a
                #if it isn't..
                else:
                    try:
                        _ranks[i+1][k]=a
                    except IndexError:
                        _ranks[-1][k]=a
    return _ranks