如何通过正常迭代创建嵌套字典?
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
这里是实时示例运行:
如何根据某些条件将默认可用词典转换为我们所需的格式。
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
这里是实时示例运行: