python - 在Python中高效创建字典并读取查询字典的输入

标签 python dictionary

我正在尝试解决的问题

我正在尝试解决this challenge使用Python。

我正在使用的解决方案

N = int(raw_input().strip())
phoneBook = {}
for i in range(N):
    name, number = raw_input().strip().split()
    phoneBook[name] = number

s = str(raw_input().strip())
while True:
    if s in phoneBook.keys():
        print "{}={}".format(s, phoneBook[s])
    else:
        print "Not found"
    try:
        s = str(raw_input().strip())
    except EOFError:
        break

我的解决方案有问题

问题出现在后面的测试用例中,其中字典中有 100,000 个条目,然后针对字典的查询数量未知。该网站表示代码在处理时超时,这似乎意味着有一种更有效的方式来执行此操作。

问题

如果可以的话,如何降低该算法的复杂性,使其运行得更快?

最佳答案

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

就这样做:

if s in phoneBook:

启用字典搜索性能

旁白:raw_input().strip().split() 可以替换为 raw_input().split(),因为 strip已经丢弃空白字段。

我会像这样的字典理解中获取所有数据(python 2):

phoneBook = dict(raw_input().split() for _ in xrange(N)) # xrange because it's faster in python 2

或者在Python 3中:

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

关于python - 在Python中高效创建字典并读取查询字典的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41247503/

相关文章:

Python os.system 超时与字符串

python - Django 自定义管理模型 View

python - 如何在一个单元格内的 ipython 笔记本中循环更新两个子图

python - 使用 if 条件在 Python 中创建键/值对

python 多处理与 maxtasksperchild

python - 我如何在运行时编写 Python 文件?

c# - 复制函数返回的字典的正确方法

image-processing - 如何使用 UnfoldingMaps 库处理处理中的这些错误消息

Python:如何在不反转原始字典的情况下反转新字典中的列表

swift - 我如何将字典作为函数参数传递?