在Python中将dict转换为另一个结构

在Python中将dict转换为另一个结构,python,Python,我的口述如下: {'activity_count': [10, 11, 12], 'type': ['all', 'paper', 'fpy']} 我想把这条格言转换成以下形式: {'all': {'activity_count': 10}, 'paper': {'activity_count': 11}, 'fpy': {'activity_count': 12}} 我怎样才能解决这个问题 到目前为止,我尝试了这个解决方案 dic={"activity_count":[10,11,12],

我的口述如下:

{'activity_count': [10, 11, 12], 'type': ['all', 'paper', 'fpy']}
我想把这条格言转换成以下形式:

{'all': {'activity_count': 10}, 'paper': {'activity_count': 11}, 'fpy': {'activity_count': 12}}
我怎样才能解决这个问题

到目前为止,我尝试了这个解决方案

dic={"activity_count":[10,11,12],"type":["all","paper","fpy"]}
in={}
i=0
for val in dic['type']:
    for v in dic['activity_count']:
        if i== dic['activity_count'].index(v):
            temp={}
            temp['activity_count']=v
            fin[val]=temp
    i+=1

它的工作原理和我预期的一样,但它看起来非常无效,无法完成这项任务。有什么办法解决这个问题吗?

我会选择zip和dict理解:

test = {'activity_count': [10, 11, 12], 'type': ['all', 'paper', 'fpy']}
solution = {key:{'activity_count':value} for value, key in zip(test["activity_count"],test["type"])}
说明:两个列表的
zip
将两个列表的元素按相同的索引分组。因此,它会将您的列表转换为一个生成器,其中的值如下:
[(10,'all'),(11,'paper'),(12,'fpy')]
。但是生成器是惰性计算的,所以元组只被处理,当dict理解要求它们时,这节省了内存


dict comprehension只是在这个生成器上迭代,并将第二个元素作为键,第一个元素作为值。

您可以使用enumerate:

dictionary = {'activity_count': [10, 11, 12], 'type': ['all', 'paper', 'fpy']}
{e:{"activity_count":dictionary.get("activity_count")[c]} for c,e in enumerate(dictionary.get("type"))}

此处使用try,Here
zip
从两个列表中获取值并分配每个值:

d = {'activity_count': [10, 11, 12], 'type': ['all', 'paper', 'fpy']}
nd = {j:{'activity_count':i} for i, j in zip(d['activity_count'], d['type'])}
print(nd)

{type\:{'activity\'u count':count}对于count,在zip中键入{(dic['activity\'u count'],dic['type'])}
差不多。需要
key:{'activity\u count':value}
而不是
key:value
来生成所请求的内容。噢,是的,当我编写代码时,我很忙。感谢您的精彩捕获,编辑了答案。您可以使用
zip(*d.values())
而不是
zip(d['activity\u count'],d['type'])。