簡體   English   中英

用兩個列表中的多個值創建字典

[英]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)

這使用了對ab迭代的所謂的dict理解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM