如何编写python方法来计算列表dict的所有组合?

2024-10-01 17:42:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个任意的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可以有任意数量的键和任意名称。你知道吗


Tags: 方法name元素列表数量字典情况例子
3条回答

Python的^{}非常适合:

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'}]

您可以发布以下列表。你知道吗

result = [dict(zip(x.keys(), t)) for t in product(*x.values())]

如果你从列表和字典的基本操作开始,用这个简单的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'}]

相关问题 更多 >

    热门问题