【发布时间】:2017-03-09 11:33:57
【问题描述】:
我开始理解和实现字典理解。我正在尝试使用这样的嵌套字典构建字典:
{serviceA:{ip_server1: flag, ip_server2:flag...}, serviceB{ip_server1: flag, ip_server_2: flag...等}}
我在构建它时遇到问题,因为它只是把我扔到最后一个元素。我尝试了很多方法,并且都以相同的方式进行。这是我使用的代码:
字典 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 理解来构建完整的字典:
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','Michael','Leslie','Lorraine']
成绩是从学生列表中分别列出的,所以这不是问题(哪个成绩属于谁)。
获取字典的目的是什么:
{'math':{'Jhon':'A', 'Michael':'B', 'Leslie':'C', 'Lorraine':'D'},数据库:{'Jhon':' B','迈克尔':'C','莱斯利':'D','洛林':'A'}}
我遇到的问题是 new_services_dict 只是返回:
{'数学:{'洛林':'D'}
我希望这比上面的解释更清楚。
【问题讨论】:
-
我的第一个猜测是
key1不是你想象的那样,它们都是相同的值,所以你最终得到一个条目。为corrected_dict、server_list 和flag_list 发布一些实际的示例数据结构,以便我们四处探索。 -
我用示例更新了问题。希望这更清楚。无论如何,下面的答案很好用。
标签: python for-loop dictionary dictionary-comprehension