从两个列表中创建具有多个值的字典
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
您可以使用字典理解和 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
。
我为此苦苦挣扎,因为我对 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
您可以使用字典理解和 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
。