Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Python字典排列组合到字典列表中_Python_Dictionary_Python 2.7 - Fatal编程技术网

将Python字典排列组合到字典列表中

将Python字典排列组合到字典列表中,python,dictionary,python-2.7,Python,Dictionary,Python 2.7,给定一个如下所示的词典: { 'Color': ['Red', 'Yellow'], 'Size': ['Small', 'Medium', 'Large'] } 如何创建组合第一个字典键的各种值的字典列表?我想要的是: [ {'Color': 'Red', 'Size': 'Small'}, {'Color': 'Red', 'Size': 'Medium'}, {'Color': 'Red', 'Size': 'Large'}, {'Colo

给定一个如下所示的词典:

{
    'Color': ['Red', 'Yellow'],
    'Size': ['Small', 'Medium', 'Large']
}
如何创建组合第一个字典键的各种值的字典列表?我想要的是:

[
    {'Color': 'Red', 'Size': 'Small'},
    {'Color': 'Red', 'Size': 'Medium'},
    {'Color': 'Red', 'Size': 'Large'},
    {'Color': 'Yellow', 'Size': 'Small'},
    {'Color': 'Yellow', 'Size': 'Medium'},
    {'Color': 'Yellow', 'Size': 'Large'}
]

我认为您需要的是笛卡尔积,而不是排列,在这种情况下,可以帮助:

>>> from itertools import product
>>> d = {'Color': ['Red', 'Yellow'], 'Size': ['Small', 'Medium', 'Large']}
>>> [dict(zip(d, v)) for v in product(*d.values())]
[{'Color': 'Red', 'Size': 'Small'}, {'Color': 'Red', 'Size': 'Medium'}, {'Color': 'Red', 'Size': 'Large'}, {'Color': 'Yellow', 'Size': 'Small'}, {'Color': 'Yellow', 'Size': 'Medium'}, {'Color': 'Yellow', 'Size': 'Large'}]

通过以下操作可以获得该结果:

x={'Color': ['Red', 'Yellow'], 'Size': ['Small', 'Medium', 'Large']}
keys=x.keys()
values=x.values()

matrix=[]
for i in range(len(keys)):
     cur_list=[]
     for j in range(len(values[i])):
             cur_list.append({keys[i]: values[i][j]})
     matrix.append(cur_list)

y=[]
for i in matrix[0]:
     for j in matrix[1]:
             y.append(dict(i.items() + j.items()))

print y
结果:

[{'Color': 'Red', 'Size': 'Small'}, {'Color': 'Red', 'Size': 'Medium'}, {'Color': 'Red', 'Size': 'Large'}, {'Color': 'Yellow', 'Size': 'Small'}, {'Color': 'Yellow', 'Size': 'Medium'}, {'Color': 'Yellow', 'Size': 'Large'}]

如果你向我们展示你的尝试,这将是一个很好的问题。无论如何,我都会说这是一个很好的问题,因为在这里要想出正确的概念并不容易。很高兴知道Python以相同的、可复制的顺序在字典项上迭代,
zip()
.values()
@蒂姆皮耶茨克:是的,这个属性是可以信赖的。顺序本身是任意的,但任何符合要求的Python实现都不能违反保证,即如果不修改
d
d.keys()
(此处
d
)和
d.values()
必须匹配。这正是我想要的!谢谢,谢谢!这太完美了。我认为由于Python3.7,dict顺序也不再是任意的了!另见