我有一个类似下面的字典:
{'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
它能按我预期的那样工作,但完成这项任务的方式看来效率很低。有办法解决这个问题吗?
答案 0 :(得分: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)
答案 1 :(得分: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"])}
说明:两个列表的zip
通过具有相同索引的两个列表元素进行分组。因此它将把您的列表转换为一个值如下的生成器:[(10, 'all'), (11, 'paper'), (12, 'fpy')]
。但是生成器是惰性计算的,因此仅处理元组,当dict理解要求它们时,这样可以节省内存。
dict理解只是在此生成器上进行迭代,并将第二个元素作为键,第一个元素作为值。
答案 2 :(得分:2)
您可以使用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"))}