【发布时间】:2017-03-06 15:50:40
【问题描述】:
有没有更聪明的方法可以将 OrderedDict 中的所有键提取到新字典中?
例如:我会将所有与'pre'匹配的键收集到字典'cfg_pre'中。我试过这个(它有效):
#!/usr/bin/env python
import collections
dl=collections.OrderedDict()
dl ={
'pre_enable': True,
'pre_path': '/usr/bin/pre_script.sh',
'pre_args': '-la -w --dir',
'post_enable': True,
'post_path': '/usr/bin/post_script.sh',
'fail_enable': True,
'fail_path': '/usr/bin/failure_script.sh',
'fail_args': '--debug 4'
}
cfg_pre = dict((k,v) for k, v in dl.items() if 'pre' in k)
cfg_post= dict((k,v) for k, v in dl.items() if 'post' in k)
cfg_fail=dict((k,v) for k, v in dl.items() if 'fail' in k)
print (cfg_pre)
print ("---")
print(cfg_post)
print ("---")
print(cfg_fail)
print ("---")
dl-dict 中的键总是以 pre、post 或 fail 开头。 谢谢;)
【问题讨论】:
-
请注意,重新分配给
dl后,它不再是OrderedDict。 -
你希望你的输出是什么? 3 个字典,3 个
OrderedDicts?还有什么? -
我认为你的解决方案已经很好了。看不到明显更好的替代方案。 ----这对
print {x.split('_')[0] for x in dl.keys()}有帮助吗?会给set(['pre', 'fail', 'post'])。 -
哦,好的。耶,这只是一个精简的最小示例。谢谢! - 为了进一步使用,我想要 3 个字典。一个包含所有前置内容,一个包含所有错误内容等等。
-
你可以使用字典理解,
{k:v for k, v in dl.items() if 'pre' in k}注意,写一个循环可能会更快,因为你只需要遍历字典一次而不是 3 次
标签: python dictionary ordereddictionary