使用两个列表中的多个值创建dict

时间:2018-04-18 13:21:23

标签: python scrapy splash

我很挣扎,因为我对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

4 个答案:

答案 0 :(得分:1)

您可以使用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'}

答案 1 :(得分:1)

您可以使用词典理解。

>>> {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且可能包含重叠前缀的元素,则所有投注均已关闭(因为您的问题未被指定)。

答案 2 :(得分:0)

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)

答案 3 :(得分:0)

你走了:

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)

这使用所谓的dict理解迭代ab