[英]python dictionary of dictionaries comprehension with nested loops
我開始理解和實現字典理解。 我試圖用這樣的嵌套字典來構建字典:
{serviceA:{ip_server1:標志,ip_server2:標志...},serviceB {ip_server1:標志,ip_server_2:標志...等}}
當獲得結果時,我在構建它時遇到了問題。它只是把我丟掉了。 我嘗試了很多方法,並且都采用相同的方法。 這是我使用的代碼:
字典1:
services_dict = {key_service: value for key_service,value in config_file.iteritems() if key_service.startswith("s-")}
#It returns a dictionary in this form {service1: [list_of_flags]}
然后我有一個包含服務器IP的外部列表
server_list = [S1,S2,S3,S4..etc]
之后,我想使用dic comprehension構建完整的字典:
new_services_dict = { key1: {key2:fl} for key1, flag_list in corrected_dict.items() for key2, fl in zip(server_list, flag_list)}
問題在於它僅返回ip列表的最后一個元素(僅1個元素)
{'ServiceA':{'last_server_ip_in_list':'Last_flag_in_list'}}
我不確定為什么不附加新值,而只是在迭代中保留最后一項。
任何幫助將不勝感激。 我已經嘗試了許多方法,但無法找出我缺少的迭代部分。
更新信息
按照下面的評論,這里有一些示例數據來澄清這個問題:假設我們必須映射我與包含年級的大學科目的詞典分開的學生列表:
services_dict = {數學:['A','B','C','D'],數據庫:['B','C','D','A']}學生名單= ['Jhon' ,“邁克爾”,“萊斯利”,“洛林”]
成績分別從學生列表中列出,因此這不是問題(哪個成績屬於誰)。
它是如何獲得以下形式的字典的:
{'math':{'Jhon':'A','Michael':'B','Leslie':'C','Lorraine':'D'},數據庫:{'Jhon':'B', 'Michael':'C','Leslie':'D','Lorraine':'A'}}
我得到的問題是new_services_dict只返回:
{'數學:{'洛林':'D'}
我希望這比上面的解釋更清楚。
對於初學者來說, new_services_dict
所有鍵看起來都是一樣的,因為您有一個嵌套的for循環,而不是嵌套的字典理解,我想這就是您想要的。
例如,
>>>{k1:{k2:v} for k1 in ['a','b'] for k2,v in zip(['aa','bb'],[1,2])}
{'b': {'bb': 2}, 'a': {'bb': 2}} # dictionaries are unordered
在此, k1
取值為'a'
然后暫停,直到k2,v
for循環遍歷所有項目,然后再繼續。 這只是將k1
重新分配給{'bb':2}
因為那是k2
迭代中的最后一項。 這就是為什么您的所有價值觀可能都一樣的原因。
您可能想要的是一個嵌套的字典理解,如下所示:
>>>{k1:{k2:v for k2,v in zip(['aa','bb'],[1,2])} for k1 in ['a','b']}
{'b': {'aa': 1, 'bb': 2}, 'a': {'aa': 1, 'bb': 2}}
在這里, k1
取值'a'
然后暫停直到嵌套的理解運行。
請查看此內容,以獲取有關嵌套理解的更多信息和更好的解釋。 這是用於列表理解的,但是適用相同的邏輯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.