[英]create dict with multiple values out of two lists. group multiple keys into one
[英]create dict with multiple values out of two lists
由於我對python和scrapy非常陌生,因此我為此付出了很多努力。 假設我有兩個清單
a = ['www.google.com', 'www.facebook.com', 'www.twitter.com']
b = ['www.google.com/adsense/', 'www.twitter.com/login', 'www.facebook.com/user/xx', 'www.facebook.com/user/yy', 'www.google.com/adwords']
現在,我想創建一個字典,其中值的域與鍵的域相匹配,如下所示:
c = {'www.google.com':['www.google.com/adsense/', 'www.google.com/adwords'], 'www.facebook.com':['www.facebook.com/user/xx', 'www.facebook.com/user/yy'], 'www.twitter.com':'www.twitter.com/login'}
對於如何實現這一目標的任何幫助,我們都感謝<3
您可以使用dict理解和str.startswith()
方法來實現此目的:
domains = ['www.google.com', 'www.facebook.com', 'www.twitter.com']
urls = ['www.google.com/adsense/', 'www.google.com/adwords',
'www.twitter.com/login', 'www.facebook.com/user/xx',
'www.facebook.com/user/yy']
c = {domain: [url for url in urls if url.startswith(domain)] for domain in domains}
>>> c
>>> {'www.google.com':['www.google.com/adsense/', 'www.google.com/adwords'],
'www.facebook.com':['www.facebook.com/user/xx', 'www.facebook.com/user/yy'],
'www.twitter.com':'www.twitter.com/login'}
您可以使用字典理解。
>>> {k:[x for x in b if x.split('/', 1)[0] == k] for k in a}
{'www.facebook.com': ['www.facebook.com/user/xx', 'www.facebook.com/user/yy'], 'www.twitter.com': ['www.twitter.com/login'], 'www.google.com': ['www.google.com/adsense/', 'www.google.com/adwords']}
請注意,這與您的預期輸出有所不同,因為鍵"www.twitter.com"
值仍然是列表。
我強烈建議您對字典中的每個值使用相同的數據結構,即使最終得到的是單元素列表。 這樣,您可以遍歷result.values()
每個元素而不會感到意外(字符串本身是可迭代的)或對每個值進行其他操作而不必擔心TypeError
。
另請注意,如果可以在a
使用帶有"/"
元素,並且前綴可能重疊,則所有選擇都不可用(因為您的問題將不明確)。
a = ['www.google.com', 'www.facebook.com', 'www.twitter.com']
b = ['www.google.com/adsense/', 'www.twitter.com/login', 'www.facebook.com/user/xx', 'www.facebook.com/user/yy', 'www.google.com/adwords']
myDict = {}
for domain in a:
myDict[domain] = []
for link in b:
if domain in link:
myDict[domain].append(link)
干得好:
a = ['www.google.com', 'www.facebook.com', 'www.twitter.com']
b = ['www.google.com/adsense/', 'www.twitter.com/login', 'www.facebook.com/user/xx', 'www.facebook.com/user/yy', 'www.google.com/adwords']
c = {key: [value for value in b if value.startswith(key)] for key in a}
print(c)
這使用了對a
和b
迭代的所謂的dict理解。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.