在python中,从defaultdict(列表)中的一个键的值中弹出一个键
我有一个在python中,从defaultdict(列表)中的一个键的值中弹出一个键,python,python-3.x,python-2.7,tuples,defaultdict,Python,Python 3.x,Python 2.7,Tuples,Defaultdict,我有一个defaultdict(lambda:defaultdict(list)) 我有以下代码: def create_jenkins_job_dict(all_jobs): jenkins_job_dict = defaultdict(lambda: defaultdict(list)) for job in all_jobs: if job.startswith("djin_a"): stackname = job.split('_'
defaultdict(lambda:defaultdict(list))
我有以下代码:
def create_jenkins_job_dict(all_jobs):
jenkins_job_dict = defaultdict(lambda: defaultdict(list))
for job in all_jobs:
if job.startswith("djin_a"):
stackname = job.split('_', 2).pop(2)
lz = job.split('_', 2).pop(1)[1:]
stack_info = parse_stack_info(stackname, lz)
if stack_info is not None:
for key, value in stack_info.items():
if (value == "up"):
jenkins_job_dict[lz][stackname].append(key)
return jenkins_job_dict
all_jobs = ['cost_explorer', 'cucumber', 'cucumber_reporter', 'cucumber_stacks_cleanup', 'cucumber_stacks_single_account', 'cucumber_stacks_update', 'deptwo.0-workflow', 'dispatcher-policy-setup', 'djin_abuild_active_directory_iandp_domains', 'djin_abuild_artifactory', 'djin_abuild_barrage_slaves', 'djin_abuild_cf_test_1', 'djin_abuild_epam', 'djin_abuild_epportal', 'djin_abuild_gate', 'djin_abuild_groups', 'djin_abuild_hostname_dispatcher_2', 'djin_abuild_jenkins_slaves', 'djin_abuild_netapp_ontap', 'djin_abuild_papi', 'djin_abuild_pibsec_se', 'djin_abuild_sonar_slave', 'djin_abuild_sonarqube', 'djin_acntsvc_category_manager', 'djin_acntsvc_consumer_search_marklogic_db', 'djin_acntsvc_searchh'] # list of names of jobs in jenkins.
jenkins_job_dict = create_jenkins_job_dict(all_jobs) # basically produces the above dict.
while jenkins_job_dict:
stack_list = jenkins_job_dict.pop(min(jenkins_job_dict,key=jenkins_job_dict.get))
stack = stack_list.pop(min(stack_list, key=stack_list.get))
print (stack)
这并不能满足我的需要,什么是最适合的方式呢?这就是你想要的:
outer={'a':{'b':[1,2,3], 'c':[4,5,6]}, 'd':{'e':[7,8,9], 'f':[10,11,12]}}
while outer:
outer_key, inner = outer.popitem()
while inner:
inner_key, inner_value = inner.popitem()
“按此顺序排列”:根据定义,字典(即哈希表)是无序的。如果您希望按特定顺序访问键和值,则应先按您希望的顺序(例如在列表中)在其他地方对键进行排序,以使其可复制,您能否提供创建此
jenkins_job_dict
字典的代码?@Niema Moshiri这就是为什么他/她使用集合中的默认dict
而不是内置的dict
类型
@NiemaMoshiri-它不必订购,只需要一次弹出一个。@Tony我想defaultdict
也是无序的?我想,OrderedDict
是唯一订购的字典。谢谢!我知道我可以用一种更简单的方法重现我的问题。
def create_jenkins_job_dict(all_jobs):
jenkins_job_dict = defaultdict(lambda: defaultdict(list))
for job in all_jobs:
if job.startswith("djin_a"):
stackname = job.split('_', 2).pop(2)
lz = job.split('_', 2).pop(1)[1:]
stack_info = parse_stack_info(stackname, lz)
if stack_info is not None:
for key, value in stack_info.items():
if (value == "up"):
jenkins_job_dict[lz][stackname].append(key)
return jenkins_job_dict
all_jobs = ['cost_explorer', 'cucumber', 'cucumber_reporter', 'cucumber_stacks_cleanup', 'cucumber_stacks_single_account', 'cucumber_stacks_update', 'deptwo.0-workflow', 'dispatcher-policy-setup', 'djin_abuild_active_directory_iandp_domains', 'djin_abuild_artifactory', 'djin_abuild_barrage_slaves', 'djin_abuild_cf_test_1', 'djin_abuild_epam', 'djin_abuild_epportal', 'djin_abuild_gate', 'djin_abuild_groups', 'djin_abuild_hostname_dispatcher_2', 'djin_abuild_jenkins_slaves', 'djin_abuild_netapp_ontap', 'djin_abuild_papi', 'djin_abuild_pibsec_se', 'djin_abuild_sonar_slave', 'djin_abuild_sonarqube', 'djin_acntsvc_category_manager', 'djin_acntsvc_consumer_search_marklogic_db', 'djin_acntsvc_searchh'] # list of names of jobs in jenkins.
jenkins_job_dict = create_jenkins_job_dict(all_jobs) # basically produces the above dict.
while jenkins_job_dict:
stack_list = jenkins_job_dict.pop(min(jenkins_job_dict,key=jenkins_job_dict.get))
stack = stack_list.pop(min(stack_list, key=stack_list.get))
print (stack)
outer={'a':{'b':[1,2,3], 'c':[4,5,6]}, 'd':{'e':[7,8,9], 'f':[10,11,12]}}
while outer:
outer_key, inner = outer.popitem()
while inner:
inner_key, inner_value = inner.popitem()