我在Python工作.我的字典看起来像这样:
score = {'a':{4:'c', 3:'d'}, 'b':{6:'c', 3:'d'}}
Run Code Online (Sandbox Code Playgroud)
我需要这样订购:
rank = [{a:3, b:6}, {a:4, b:3}]
Run Code Online (Sandbox Code Playgroud)
在具有排他键值的最大组合的子字典在第一元素中的情况下,排他键值的第二最大组合在第二元素中,依此类推.最大的组合逻辑是:1.从每个字典中获取最大组合键(总和)(在这种情况下,它将是a-> 4:'c'和b-> 6:'d'.删除这些值从字典中获取下一个最大的键组合(在这种情况下,它将是a-> 4:'c'和b-> 3:'d').这应该持续到原始字典为空.
它是独占的,因为一旦从原始字典中使用了一次值,就应将其删除,或排除在以后的任何组合中再次使用.
我尝试过所有我认识的不同方法,但从算法上来说,我错过了一些东西.
我想我做了你要找的东西?这是一个奇怪的算法,由于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
Run Code Online (Sandbox Code Playgroud)