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

Moh*_* ah 10 python

我有一个如下的字典:

{'activity_count': [10, 11, 12], 'type': ['all', 'paper', 'fpy']}
Run Code Online (Sandbox Code Playgroud)

我想将这个字典转换成这种形式:

{'all': {'activity_count': 10}, 'paper': {'activity_count': 11}, 'fpy': {'activity_count': 12}}
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?

到目前为止我试过这个解决方案

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
Run Code Online (Sandbox Code Playgroud)

它按照我的预期工作,但它看起来非常无效的方式来完成这项任务.有没有办法解决这个问题?

Vik*_*dar 11

这里是一个尝试,这里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)
Run Code Online (Sandbox Code Playgroud)

  • 可以使用zip(* d.values())代替zip(d ['activity_count'],d ['type'])`。 (2认同)

Bie*_*bar 6

我会去拉链和词典理解:

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"])}
Run Code Online (Sandbox Code Playgroud)

说明:zip两个列表中的两个列表使用相同的索引对两个列表的元素进行分组.所以它会将你的列表转换为一个生成器,其值如下:[(10, 'all'), (11, 'paper'), (12, 'fpy')].但是生成器是惰性求值的,因此仅在dict理解要求时才处理元组,这样可以节省内存.

字典理解只是迭代这个生成器并将第二个元素作为键,第一个元素作为值.

  • 几乎.需要`key:{'activity_count':value}`而不是`key:value`来生成所请求的内容. (2认同)