仅编辑显示方法和时间
由于OP询问了执行此操作的最快方法,我根据(希望)在我的电脑上进行的公平测试对讨论中的方法进行了排名。目标是找到字典键是否不相交,似乎 dict_keys.isdisjoint()
方法优于其他集合或列表操作。
但是,如其他答案所述,这将根据相关字典的大小以及它们是否不相交而变化。
这些测试仅针对两个相等(小)大小且不相交的字典。
最快的方法: dict_keys.isdisjoint()
示例:
{"a": 1, "b": 2, "c": 3 }.keys().isdisjoint({ "d": 4, "e": 5, "f": 6}.keys())
时间:
>>> timeit.timeit('{"a": 1, "b": 2, "c": 3 }.keys().isdisjoint({ "d": 4, "e": 5, "f": 6}.keys())')
0.4637166199972853
第二快: set.isdisjoint()
示例:
set({"a": 1, "b": 2, "c": 3 }.keys()).isdisjoint(set({ "d": 4, "e": 5, "f": 6}.keys()))
时间:
>>> timeit.timeit('set({"a": 1, "b": 2, "c": 3 }.keys()).isdisjoint(set({ "d": 4, "e": 5, "f": 6}.keys()))')
0.774243315012427
第三快速方法:列表推导式和 all()
函数:
示例:
all(k not in {"a": 1, "b": 2, "c": 3 } for k in { "d": 4, "e": 5, "f": 6})
时间:
>>> timeit.timeit('all(k not in {"a": 1, "b": 2, "c": 3 } for k in { "d": 4, "e": 5, "f": 6})')
0.8577601349970791
第四快的方法:使用对称差异(^
)和not()
示例:
not set({"a": 1, "b": 2, "c": 3 }.keys()) ^ set({ "d": 4, "e": 5, "f": 6}.keys())
时间:
>>> timeit.timeit('not set({"a": 1, "b": 2, "c": 3 }.keys()) ^ set({ "d": 4, "e": 5, "f": 6}.keys())')
0.9617313010094222
.keys()
提供的唯一(非私有)方法! - Chris_Rands