Python sorting question - given list of ['url', 'tag1', 'tag2',..]s and search specification ['tag3', 'tag1',...], return relevant url list
<p>I'm quite new to programming so I'm sure there's a terser way to pose this, but I'm trying to create a personal bookmarking program. Given multiple urls each with a list of tags ordered by relevance, I want to be able to create a search consisting of a list of tags that returns a list of most relevant urls. My first solution, below, is to give the first tag a value of 1, the second 2, and so on &amp; let the python list sort function do the rest. 2 questions:</p>

<p>1) Is there a much more elegant/efficient way of doing this (embarrass me!)
2) Any other general approaches to the sorting by relevance given the inputs above problem?</p>

<p>Much obliged.</p>

<pre><code># Given a list of saved urls each with a corresponding user-generated taglist 
# (ordered by relevance), the user enters a "search" list-of-tags, and is 
# returned a sorted list of urls. 

# Generate sample "content" linked-list-dictionary. The rationale is to 
# be able to add things like 'title' etc at later stages and to 
# treat each url/note as in independent entity. But a single dictionary
# approach like "note['url1']=['b','a','c','d']" might work better?

content = []
note = {'url':'url1', 'taglist':['b','a','c','d']}
content.append(note)
note = {'url':'url2', 'taglist':['c','a','b','d']}
content.append(note)
note = {'url':'url3', 'taglist':['a','b','c','d']}
content.append(note)
note = {'url':'url4', 'taglist':['a','b','d','c']}
content.append(note)
note = {'url':'url5', 'taglist':['d','a','c','b']}
content.append(note)

# An example search term of tags, ordered by importance
# I'm using a dictionary with an ordinal number system 
# This seems clumsy
search = {'d':1,'a':2,'b':3}

# Create a tagCloud with one entry for each tag that occurs
tagCloud = []
for note in content:
    for tag in note['taglist']:
        if tagCloud.count(tag) == 0:
            tagCloud.append(tag)

# Create a dictionary that associates an integer value denoting
# relevance (1 is most relevant etc) for each existing tag

d={}            
for tag in tagCloud:
    try:
        d[tag]=search[tag]
    except KeyError:
        d[tag]=100

# Create a [[relevance, tag],[],[],...] result list &amp; sort 
result=[]    
for note in content:
    resultNote=[]
    for tag in note['taglist']:
        resultNote.append([d[tag],tag])
    resultNote.append(note['url'])
    result.append(resultNote)
result.sort()

# Remove the relevance values &amp; recreate a list containing
# the url string followed by corresponding tags. 
# Its so hacky i've forgotten how it works!
# It's mostly for display, but suggestions on "best-practice" 
# intermediate-form data storage? 

finalResult=[]
for note in result:
    temp=[]
    temp.append(note.pop())
    for tag in note:
        temp.append(tag[1])
    finalResult.append(temp)

print "Content: ", content
print "Search: ", search
print "Final Result: ", finalResult
</code></pre>
