Python 使用字符串将字典拆分为两个子字典

Python 使用字符串将字典拆分为两个子字典,python,dictionary,Python,Dictionary,我有一本字典,我想根据一个字符串把它分成两个子字典 有没有比这更好(更像蟒蛇)的方法: dict_1 = {k:v for (k,v) in initial_dict.iteritems() if string in k} dict_2 = {k:v for (k,v) in initial_dict.iteritems() if string not in k} 我会投票支持你的原创作品。清晰、简短,但效率稍低 有一种方法不需要多次引用或测试initial_dict的元素,如果Pythoni

我有一本字典,我想根据一个字符串把它分成两个子字典

有没有比这更好(更像蟒蛇)的方法:

dict_1 = {k:v for (k,v) in initial_dict.iteritems() if string in k}
dict_2 = {k:v for (k,v) in initial_dict.iteritems() if string not in k}

我会投票支持你的原创作品。清晰、简短,但效率稍低

有一种方法不需要多次引用或测试initial_dict的元素,如果Pythonic意味着知道
int(False)==0
int(True)==1

dict1, dict2 = {}, {}
for k,v in initial_dict.items(): (dict2,dict1)[string in k][k] = v
就像我说的,我更喜欢提问者的方式


顺便说一句,如果您必须在获取或生成密钥的循环中执行n路分区,
dict_list[i][key]=v
,如果。。。埃利夫。。。elif…

你的字典是什么样子的?预期结果是什么?您可以使用单个循环并使用单个
if/else
中断,而不是通过
initial\u dict
重复两次。但实际上,除非您处理大量条目,否则任何性能提升都不会显著,即使如此,可读性在这里也可能更有价值。在第一次构建
initial\u dict
时,更可能更好地解决这个问题。键是字符串(用户名),值是{date\u in,date\u out}的元组。我想有两个字典,一个包含特定用户名的所有条目,另一个字典包含所有其他用户名。你想保持
initial\u dict
原样,还是可以修改它?键是唯一的,特定用户名不是只有一个条目吗?需要使用
dict(initial\u dict)创建副本
感谢您指出这一点!对不起,我错误地认为可以对初始指令进行变异。这是个好主意™ 因此,即使代码对您来说很明显,也要对代码添加一些解释。答案不仅对OP有帮助,对未来的读者也有帮助。FWIW,作为一个原则问题,一些常客会否决只投票代码答案,因为答案应该解释东西,而不仅仅是显示它是如何做的。(我更喜欢留下评论&最后只能使用否决票)。另外,只有代码的答案可能更难通过搜索引擎找到。你可以将
dict_2=initial_dict.copy()
作为第一行,然后在dict理解中用
dict_2
代替
initial_dict
。我更喜欢你的方式,因为它不需要在
dict
上重复两遍。但是我将
的循环拆分为两行,这并不是说存在全局空白短缺另外,我同意你关于“如果……如果……”的话,dict_list[I]
比长的
if…
更好的说法。它更紧凑,也更高效,因为它(可能)避免了执行测试。我总是喜欢循环,而不是一行上的一个简短(ish)语句。屏幕上的垂直空间是一种宝贵的资源,我喜欢在编码时看到尽可能多的代码,前提是它不会在水平方向上变得丑陋。可能只是个人喜好。(同样地,
if条件:statement
)开玩笑地说:如果BDFL不打算让我们写一行循环,他就不会给我们在冒号后面放一条语句的能力。当然,我过去经常这样做,尤其是
break
continue
。但我看到了我的错误(尽管我在交互式口译员中玩的时候仍然这样做)。如果您遵循,并且不在冒号后面的同一行上放置内容,那么控制流在视觉上会更加明显。
dict1, dict2 = {}, {}
for k,v in initial_dict.items(): (dict2,dict1)[string in k][k] = v