我在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')。这应该继续直到原始字典是空。
它是独占的,因为一旦从原始字典中使用了一次值,就应将其删除,或排除在以后的任何组合中再次使用。
我尝试过所有我认识的不同方法,但在算法上我错过了一些东西。
答案 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