我有一个任意的python字典x
,这样每个键的值本身就是一个列表。这是一个例子:
x = {"first_name": ["Mahmoud", "Pei-chi"], "second_name": ["Abadi", "Yao"]}
给定x
我想编写一个计算字典列表的方法,使每个字典具有与x相同的键,但值是每个列表元素的组合。所以在这种情况下,结果应该是:
[{"first_name": "Mahmoud", "second_name": "Abadi"},
{"first_name": "Mahmoud", "second_name": "Yao"},
{"first_name": "Pei-chi", "second_name": "Abadi"},
{"first_name": "Pei-chi", "second_name": "Yao"}]
我该怎么办?字典x
可以具有任意数量的具有任意名称的键。
答案 0 :(得分:2)
您可以发出以下列表理解。
[CallerMemberType]
答案 1 :(得分:1)
Python itertools.product()
对此有好处:
from itertools import product
x = {"first_name": ["Mahmoud", "Pei-chi"], "second_name": ["Abadi", "Yao"]}
dict_list = [{'first_name': f, 'second_name':s} for f, s in product(x['first_name'], x['second_name'])]
给你:
[{'first_name': 'Mahmoud', 'second_name': 'Abadi'}, {'first_name': 'Mahmoud', 'second_name': 'Yao'}, {'first_name': 'Pei-chi', 'second_name': 'Abadi'}, {'first_name': 'Pei-chi', 'second_name': 'Yao'}]
答案 2 :(得分:0)
如果你从列表和字典的基本操作开始,使用这个简单的for循环,你就可以进行上述操作,但是它在整洁性方面没有那么多优化,操作的螺母复杂性是相同的。
lis = []
for f in x:
if f =='first_name':
for l in x[f]:
for j in x['second_name']:
dic ={}
dic['first-name']=l;dic['last_name']=j
lis.append(dic)
O / P将如我们所料:
[{'first-name': 'Mahmoud', 'last_name': 'Abadi'},
{'first-name': 'Mahmoud', 'last_name': 'Yao'},
{'first-name': 'Pei-chi', 'last_name': 'Abadi'},
{'first-name': 'Pei-chi', 'last_name': 'Yao'}]
答案 3 :(得分:0)
如果您的dict无序,请不要担心您可以使用有序的dict,它不会改变结果,每次都会给出相同的结果。
dict_1 = {"first_name": ["Mahmoud", "Pei-chi"], "second_name": ["Abadi", "Yao"]}
import itertools
import collections
from operator import itemgetter
ordered_dict=collections.OrderedDict(sorted(dict_1.items(), key=itemgetter(0)))
items=[]
for key,value in ordered_dict.items():
items.append(value)
print([{"first_name":item[0],"last_name" :item[1]} for item in itertools.product(*items, repeat=1) if len(item)>1])
输出:
[{'first_name': 'Mahmoud', 'last_name': 'Abadi'}, {'first_name': 'Mahmoud', 'last_name': 'Yao'}, {'first_name': 'Pei-chi', 'last_name': 'Abadi'}, {'first_name': 'Pei-chi', 'last_name': 'Yao'}]