[英]Populating Nested Dictionary based on user selection in python?
我有 4 套字典和 3 套列表。 基於此,我想創建一個嵌套字典( target_result )。
cname = {"file":"cn_file" ,"accounts":"cn_accounts" ,"inventory":"cn_inventory" ,"payroll":"cn_PayRoll"}
english = {"file":"File" ,"accounts":"Accounts" ,"inventory":"Inventory" ,"payroll":"PayRoll"}
tamil = {"file":"Koppu" ,"accounts":"Kanakiyal" ,"inventory":"Saragu" ,"payroll":"Sambalam"}
hindi = {"file":"Hindi_file","accounts":"Hindi_accounts","inventory":"Hindi_inventory","payroll":"Hindi_payroll"}
dict_item_mainkeys =["file","accounts","inventory","payroll"]
dict_item_subkeys =["cname","item1","item2"]
language_selection =["English","Tamil"]
target_result = {"file" :{"cname":"","item1":"","item2":""},
"accounts" :{"cname":"","item1":"","item2":""},
"inventory":{"cname":"","item1":"","item2":""},
"payroll" :{"cname":"","item1":"","item2":""}
}
就我而言,我的第一個 Language_selection 是英語,第二個是“泰米爾語”基於語言選擇,item1 使用第一種語言選項(英語詞典)更新,item2 使用第二種語言選項(泰米爾語詞典)更新,並且名稱用字典“cname”更新。 例如 :
target_result = {"file" :{"cname":"cn_file" ,"item1":"File" ,"item2":"Koppu"},
"accounts" :{"cname":"cn_accounts" ,"item1":"Accounts" ,"item2":"Kanakiyal"},
"inventory":{"cname":"cn_inventory","item1":"Inventory","item2":"Saragu"},
"payroll" :{"cname":"cn_apyroll" ,"item1":"PayRoll" ,"item2":"Sambalam"}
}
語言選擇因用戶而異。
這很困難,因為您已經命名了變量。 如果您使用字典代替例如
languages = {
"cname" : {"file":"cn_file" ,"accounts":"cn_accounts" ,"inventory":"cn_inventory" ,"payroll":"cn_PayRoll"},
"English" : {"file":"File" ,"accounts":"Accounts" ,"inventory":"Inventory" ,"payroll":"PayRoll"},
"Tamil" : {"file":"Koppu" ,"accounts":"Kanakiyal" ,"inventory":"Saragu" ,"payroll":"Sambalam"},
"Hindi" : {"file":"Hindi_file","accounts":"Hindi_accounts","inventory":"Hindi_inventory","payroll":"Hindi_payroll"}
}
然后你可以相當容易地循環你的兩個關鍵列表:
dict_item_mainkeys =["file","accounts","inventory","payroll"]
dict_item_subkeys =["cname","item1","item2"]
language_selection =["English","Tamil"]
target_result = {}
for mk in dict_item_mainkeys:
target_result[mk] = {}
for i, sk in enumerate(dict_item_subkeys):
if sk in languages:
target_result[mk][sk] = languages[sk][mk]
else:
target_result[mk][sk] = languages[language_selection[i-1]][mk]
輸出:
{
'file': {'cname': 'cn_file', 'item1': 'File', 'item2': 'Koppu'},
'accounts': {'cname': 'cn_accounts', 'item1': 'Accounts', 'item2': 'Kanakiyal'},
'inventory': {'cname': 'cn_inventory', 'item1': 'Inventory', 'item2': 'Saragu'},
'payroll': {'cname': 'cn_PayRoll', 'item1': 'PayRoll', 'item2': 'Sambalam'}
}
我首先將主要信息放在一個字典中,這樣就可以很容易地使用字符串鍵查找值:
initial_data = {
"cname": {
"file": "cn_file",
"accounts": "cn_accounts",
"inventory": "cn_inventory",
"payroll": "cn_PayRoll",
},
"english": {
"file": "File",
"accounts": "Accounts",
"inventory": "Inventory",
"payroll": "PayRoll",
},
"tamil": {
"file": "Koppu",
"accounts": "Kanakiyal",
"inventory": "Saragu",
"payroll": "Sambalam",
},
"hindi": {
"file": "Hindi_file",
"accounts": "Hindi_accounts",
"inventory": "Hindi_inventory",
"payroll": "Hindi_payroll",
},
}
要將dict_item_subkeys
與language_selection
對齊,您可以使用 zip,但請確保在處理 cname 值后將其抵消。
dict_item_mainkeys = ["file", "accounts", "inventory", "payroll"]
dict_item_subkeys = ["cname", "item1", "item2"]
language_selection = ["English", "Tamil"]
target_result = {}
for mainkey in dict_item_mainkeys:
target_result[mainkey] = {}
target_result[mainkey]["cname"] = initial_data["cname"][mainkey]
for subkey, language in zip(dict_item_subkeys[1:], language_selection):
target_result[mainkey][subkey] = initial_data[language.lower()][mainkey]
pprint(target_result)
{'accounts': {'cname': 'cn_accounts',
'item1': 'Accounts',
'item2': 'Kanakiyal'},
'file': {'cname': 'cn_file', 'item1': 'File', 'item2': 'Koppu'},
'inventory': {'cname': 'cn_inventory',
'item1': 'Inventory',
'item2': 'Saragu'},
'payroll': {'cname': 'cn_PayRoll', 'item1': 'PayRoll', 'item2': 'Sambalam'}}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.