如何通过正常迭代创建嵌套字典?

How to create a nested dictionary through normal iterating?

如何根据某些条件将默认可用词典转换为我们所需的格式。

language = {"english" : {"lbl01":"File"      ,"lbl02":"Accounts"},
            "tamil"   : {"lbl01":"கோப்பு"    ,"lbl02":"கணக்கியல்"},
            "Hindi"   : {"lbl01":"Hindi_File","lbl02":"Hindi_accounts"}}

selected_lan =["english","tamil"]

例如:从上面的默认词典,我想按以下格式创建一个新词典,在我的例子中,我 select 第一语言为英语,第二语言为泰米尔语:

{'lbl01': {'english': 'File', 'tamil': 'கோப்பு'}, 'lbl02': {'english': 'Accounts', 'tamil': 'கணக்கியல்'}}

我尝试了下面的代码,它的输出如下:,

lan_dict_1 = {}
for n,d in language.items():
    if n in selected_lan:
        for i,j in d.items():
            lan_dict_1={n:d[i]}
            print(lan_dict_1)

输出

{'english': 'File'}
{'english': 'Accounts'}
{'tamil': 'கோப்பு'}
{'tamil': 'கணக்கியல்'}

如何实现,在正常循环和理解方法中?

您可以使用 pandas:

import pandas as pd
pd.DataFrame(language).T.to_dict() 

{'lbl01': {'english': 'File', 'tamil': 'கோப்பு', 'Hindi': 'Hindi_File'},
 'lbl02': {'english': 'Accounts',
  'tamil': 'கணக்கியல்',
  'Hindi': 'Hindi_accounts'}}

如果你想使用 selected_lan:

selected_lan =["english","tamil"]
pd.DataFrame(language)[selected_lan].T.to_dict()

{'lbl01': {'english': 'File', 'tamil': 'கோப்பு'},
 'lbl02': {'english': 'Accounts', 'tamil': 'கணக்கியல்'}}

对于正常循环:

d = {}
selected_lan =["english","tamil"]
for lan, vals in language.items():
    for idx, typ in vals.items():
        if d.get(idx) is None:
            d[idx] = {}
        if lan in selected_lan:
            d[idx].update({lan:typ})
print(d)
        

{'lbl01': {'english': 'File', 'tamil': 'கோப்பு'},
 'lbl02': {'english': 'Accounts', 'tamil': 'கணக்கியல்'}}

备选方案:

language = {"english" : {"lbl01":"File"      ,"lbl02":"Accounts"},
        "tamil"   : {"lbl01":"கோப்பு"    ,"lbl02":"கணக்கியல்"},
        "Hindi"   : {"lbl01":"Hindi_File","lbl02":"Hindi_accounts"}}
        

select = ["english","tamil"]

labels = language['english'].keys() # ['lbl01', 'lbl02']

output = dict( zip ( 
    labels, 
    map( lambda label: {sel:language[sel][label] for sel in select}, labels )
) )

print( output )

或者你喜欢哪个:

output = {
    lab: {sel:language[sel][lab] for sel in select}
    for lab in labels
}

仅使用 for 循环的替代方法:

language = {"english" : {"lbl01":"File"      ,"lbl02":"Accounts"},
            "tamil"   : {"lbl01":"கோப்பு"    ,"lbl02":"கணக்கியல்"},
            "Hindi"   : {"lbl01":"Hindi_File","lbl02":"Hindi_accounts"}}

selected_lan =["english","tamil"]

lan_dict_1 = {}
keys = list(language[selected_lan[0]].keys())
for sec_key in keys:
  sec_dicts = {}
  for key in selected_lan:
    sec_dicts[key] = language[key][sec_key]
    lan_dict_1[sec_key] = sec_dicts

这里是实时示例运行:

https://abstra.show/P3BQoFskIn