Python 如何基于与键关联的值列表创建字典?
我有一个字典params_dict,我正在使用它来使用urllib请求和解析为url字符串生成查询参数。它工作正常,当我调整参数时,我只需.copy()dict并使用.update()更新相关的键/值对 然而,这似乎很笨拙。某些键值对与“mt”、“division”的键值对相同,但对于其他键值,其值可以来自如下列表:Python 如何基于与键关联的值列表创建字典?,python,list,dictionary,itertools,Python,List,Dictionary,Itertools,我有一个字典params_dict,我正在使用它来使用urllib请求和解析为url字符串生成查询参数。它工作正常,当我调整参数时,我只需.copy()dict并使用.update()更新相关的键/值对 然而,这似乎很笨拙。某些键值对与“mt”、“division”的键值对相同,但对于其他键值,其值可以来自如下列表: params_dict = {'mt':0, 'age':[1,2,3,4,5,6] 'sex':1, 'color':['red', 'green', 'blue', 'purp
params_dict = {'mt':0, 'age':[1,2,3,4,5,6] 'sex':1, 'color':['red', 'green', 'blue', 'purple'], 'year':[2008, 2009, 2010, 2011, 2012, 2013, 2014], 'division':&}
我想做的是生成生成url的查询部分所需的所有参数组合,并将其转储到列表中,然后使用for循环请求该列表中的url链接
所以有些组合看起来像:
combo1_dict = {'mt':0, 'age':1, 'sex':1, 'color':'green', 'year':2008, 'division':&}
combo2_dict = {'mt':0, 'age':1 'sex':1, 'color':'blue', 'year':2008, 'division':&}
……等等。我尝试过使用itertools.combines(),但我还是不太明白
任何建议/指导都将不胜感激 你很接近。用于在单个列表中获取所有可能的项目组合。但是,您需要多个列表中所有可能的项目组合,以便每个列表只贡献一个项目
解决办法是:
输入变量的笛卡尔积
大致相当于生成器表达式中的嵌套for循环。例如,产品(A,B)
返回的值与相同(A中x的(x,y)表示B中y的值)
因此,对于您的urllib示例:
import itertools
ages = [1,2,3,4,5,6] #all possible ages
colors = ['red', 'green', 'blue', 'purple'] #all possible colors
years = [2008, 2009, 2010, 2011, 2012, 2013, 2014] #all possible years
param_dicts = []
for age, color, years in itertools.product(ages,colors,years):
#for all possible combinations of ages, colors, and years
param_dicts.append({'mt':0, 'age':age, 'sex':1, 'color':color, 'year':year, 'division':&})
或作为列表:
param_dicts = [{'mt':0, 'age':age, 'sex':1, 'color':color, 'year':year, 'division':&} for age, color, years in itertools.product(ages,colors,years)]
您的用例是什么?传递多个年龄的列表(在查询字符串中表示为
?年龄=1&age=2
)是一种有效且常见的方法。
param_dicts = [{'mt':0, 'age':age, 'sex':1, 'color':color, 'year':year, 'division':&} for age, color, years in itertools.product(ages,colors,years)]