我有一个如下的字典:
{'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)
我会去拉链和词典理解:
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理解要求时才处理元组,这样可以节省内存.
字典理解只是迭代这个生成器并将第二个元素作为键,第一个元素作为值.