gpt4 book ai didi

Python排序问题 - 给定 ['url' , 'tag1' , 'tag2' ,..] 列表和搜索规范 ['tag3' , 'tag1' ,...],返回相关 url 列表

转载 作者:行者123 更新时间:2023-12-01 06:13:47 24 4
gpt4 key购买 nike

我对编程很陌生,所以我确信有一种更简洁的方法来提出这个问题,但我正在尝试创建一个个人书签程序。给定多个网址,每个网址都有一个按相关性排序的标签列表,我希望能够创建一个由标签列表组成的搜索,该搜索返回最相关的网址列表。我的第一个解决方案如下,是将第一个标签的值设置为 1,第二个标记的值设置为 2,依此类推,然后让 python 列表排序函数完成其余的工作。 2个问题:

1)有没有更优雅/更有效的方法来做到这一点(让我难堪!)2)考虑到上述问题的输入,还有其他按相关性排序的通用方法吗?

非常感谢。

# 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 & 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 & 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

最佳答案

1) Is there a much more elegant/efficient way of doing this (embarrass me!)

当然可以。基本思想:不要试图告诉 Python 做什么,而只是询问它你想要什么。

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

search = {'d' : 1, 'a' : 2, 'b' : 3}

# We can create the tag cloud like this:
# tagCloud = set(sum((note['taglist'] for note in content), []))
# But we don't actually need it: instead, we'll just use a default value
# when looking things up in the 'search' dict.

# Create a [[relevance, tag],[],[],...] result list & sort
result = sorted(
[
[search.get(tag, 100), tag]
for tag in note['taglist']
] + [[note['url']]]
# The result will look like [ [relevance, tag],... , [url] ]
# Note that the url is wrapped in a list too. This makes the
# last processing step easier: we just take the last element of
# each nested list.
for note in content
)

# Remove the relevance values & recreate a list containing
# the url string followed by corresponding tags.
finalResult = [
[x[-1] for x in note]
for note in result
]

print "Content: ", content
print "Search: ", search
print "Final Result: ", finalResult

关于Python排序问题 - 给定 ['url' , 'tag1' , 'tag2' ,..] 列表和搜索规范 ['tag3' , 'tag1' ,...],返回相关 url 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4419955/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com