代码之家  ›  专栏  ›  技术社区  ›  Mohamed Thasin ah

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

  •  10
  • Mohamed Thasin ah  · 技术社区  · 6 年前

    我有如下口述:

    {'activity_count': [10, 11, 12], 'type': ['all', 'paper', 'fpy']}
    

    我要将此dict转换为以下形式:

    {'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
    

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

    3 回复  |  直到 6 年前
        1
  •  11
  •   Peter Mortensen user1284631    6 年前

    这里试试,这里 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)
    
        2
  •  6
  •   Bierbarbar    6 年前

    我想了解一下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理解只是迭代这个生成器,并将第二个元素作为键,第一个元素作为值。

        3
  •  2
  •   whackamadoodle3000    6 年前

    您可以使用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"))}