我錯過了一些東西,它讓我發瘋,。出于某種原因,對aliases字典串列的查找不起作用。
import urllib.parse
def parse_source_from_url(url):
# Clean up the url
parse_url = urllib.parse.urlparse(url.strip().replace('\n', ''))
# Parse the interesting parts
url = parse_url.netloc.split('.')
# Words to omit
keywords = ['feeds', 'com']
# Determine which url words are not keywords to omit
feed_source = [u for u in url if u not in keywords][0]
# Map out aliases as needed
aliases = [
{'feed_source': 'example', 'alias': 'good'},
{'feed_source': 'feedburner', 'alias': 'notgood'}]
# Select alias if feed_source is shown in list of dict
# This is where the problem is
feed_source = [
a['alias']
if a['feed_source'] == feed_source
else feed_source
for a in aliases]
# Return only the aliased name
return feed_source[0]
urls = ['https://feeds.example.com/', 'https://feeds.feedburner.com/']
for u in urls:
test = parse_source_from_url(u)
print(test)
結果:
- 第一個結果是正確的(“example”別名為“good”),但第二個 URL 不正確。
- “feedburner”應該別名為“notgood”
good
feedburner
試過:
- 這里使用的方法
next()和get()方法。 - 同樣的問題
uj5u.com熱心網友回復:
您有點錯過if回圈中的位置。現在您的feed_source串列包含與串列一樣多的記錄aliases。feed_source除了最終有別名的人之外,所有這些人都是平等的,但無論如何你都會先接受它。
正確的代碼應該是:
aliased = [a["alias"] for a in aliases if a["feed_source"] == feed_source]
return aliased[0] if aliased else feed_source
所以aliased現在最多只有一個元素。如果是,它是別名,如果不是(所以aliased是空的)你就回傳feed_source
還有一個提示——如果你的aliases元素總是有兩個鍵,也許你可以只使用 dict:
aliases = {'example': 'good', 'feedburner': 'notgood'}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/410037.html
標籤:
下一篇:按字典值對字典的嵌套串列進行排序
