在Python中高效地创建字典并读取查询字典的输入 我想解决的问题

在Python中高效地创建字典并读取查询字典的输入 我想解决的问题,python,dictionary,Python,Dictionary,我正在尝试使用Python解决这个问题 我正在使用的解决方案 我的解决方案有问题吗 问题出现在后面的测试用例中,其中字典中有100000个条目,然后对字典进行未知数量的查询。该网站说,代码在处理时超时,这似乎意味着有一种更有效的方式来执行此操作 问题: 如果有的话,我如何降低该算法的复杂度,使其运行更快?在phoneBook.keys()中执行if s:您没有利用python字典搜索(在python 2中,keys()返回一个列表) 只要做: if s in phoneBook: 启用字典搜索

我正在尝试使用Python解决这个问题

我正在使用的解决方案 我的解决方案有问题吗 问题出现在后面的测试用例中,其中字典中有100000个条目,然后对字典进行未知数量的查询。该网站说,代码在处理时超时,这似乎意味着有一种更有效的方式来执行此操作

问题:
如果有的话,我如何降低该算法的复杂度,使其运行更快?

在phoneBook.keys()中执行
if s:
您没有利用python字典搜索(在python 2中,
keys()
返回一个
列表

只要做:

if s in phoneBook:
启用字典搜索性能的步骤

旁白:
raw\u input().strip().split()
可以替换为
raw\u input().split()
,因为
strip
已经丢弃了空白字段

我将以这样的方式获得dict理解中的所有数据(python 2):

或者在python 3中:

phoneBook = dict(input().split() for _ in range(N))

phoneBook.keys()
在每次循环运行时创建键列表。您可以尝试
如果phoneBook.get(s):打印
或忽略该步骤,只需
尝试/排除可能更快的
。我认为对sys.stdin:
中的行使用
会更容易;然后您可以删除
try:…
和重复的
raw\u input()
行。这是一个简单的解决方案。谢谢。
raw\u input
更安全,
input
会评估您的数据,因此它不会工作。Python3除外,在Python3中,您必须始终使用
input
phoneBook = dict(raw_input().split() for _ in xrange(N)) # xrange because it's faster in python 2
phoneBook = dict(input().split() for _ in range(N))