簡體   English   中英

根據python中的用戶選擇填充嵌套字典?

[英]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_subkeyslanguage_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.

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