如何在不更新字典(Python)的情况下检查defaultdict中的键?
在使用Python字典时,我通常使用以下习惯用法:如何在不更新字典(Python)的情况下检查defaultdict中的键?,python,dictionary,defaultdict,Python,Dictionary,Defaultdict,在使用Python字典时,我通常使用以下习惯用法: try: val = dct[key] except KeyError: print key, " is not valid" 因为对于大型词典来说 if key in dct: # do something 效率不是很高(所以我记得读过,但我在实践中也注意到了) 今天我使用的是defaultdict,有一刻我忘记了defaultdict不会给你一个键错误,而是会更新原始字典 如何在不更新defaultdict的情况
try:
val = dct[key]
except KeyError:
print key, " is not valid"
因为对于大型词典来说
if key in dct:
# do something
效率不是很高(所以我记得读过,但我在实践中也注意到了)
今天我使用的是defaultdict,有一刻我忘记了defaultdict不会给你一个键错误,而是会更新原始字典
如何在不更新defaultdict的情况下执行查找?我真的需要打印一个错误,以便用户可以重新输入密钥
谢谢大家!
更新:几张海报表明,我认为如果dct中的键:变慢,则认为是错误的。我回去查看了我读过的那本书,那本书最好使用try:except:
。这是Alex Martelli 2002年出版的Python食谱1.4,也可以在网上找到:。旧的记忆太不可靠了!配方中没有提到“较慢”,甚至没有在
中使用,但有_键
。它只是说try:except:
更像Pythonic(至少是食谱的书本版)。谢谢你的更正和答案
如何在不更新defaultdict的情况下执行查找
使用键输入dct
,即显式输入
如果这对你来说真的太贵了(衡量一下,你会确定的),那么在特定情况下有一些变通办法。例如,如果您的默认值是'ham'
,并且在某些情况下,当未找到键时,您不想将(key,'ham')
存储在defaultdict
中,您可以这样做
dct.get(key, 'ham') # will return dct[key] or 'ham' but never stores anything
dct中的键必须是快的,说慢就像说dct[key]
慢一样,决不能是这样。在任何合适的字典实现中,从给定键的字典中检索元素和测试键的成员资格都必须是O(1)操作,并且很容易看出如何根据访问操作实现成员资格操作
有关defaultdict
的问题,只需使用中的。在普通词典中,没有理由避免使用;这是关于defaultdict
,输入d
不慢,句号。如果你不这么说,你最好有确凿的证据timeit
说它和成功的d[key]
一样快,比d[key]
+快很多(将近10倍),除了:pass
(当然,如果钥匙几乎总是存在,它可能比显式的稍快一些)。现在,key-in d.keys()
(Python 2.x)或key-in-list(d.keys())
(Python 3.x)的速度很慢,但这是因为它故意丢弃哈希表信息。必须看到。has_-key
被弃用,取而代之的是key-in-dct
——请不要提倡使用老习惯用法。