簡體   English   中英

在Python中將dict轉換為另一個結構

[英]Transforming a dict to another structure in 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],"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用於從兩個列表中獲取值並分配每個:

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)

我會去拉鏈和詞典理解:

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理解要求時才處理元組,這樣可以節省內存。

字典理解只是迭代這個生成器並將第二個元素作為鍵,第一個元素作為值。

你可以使用枚舉來嘗試這個字典理解:

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"))}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM