python - 按顺序查找字段

标签 python

假设我有一个查找列表和一本字典:

>>> l=['A','B','C']
>>> di={'A':3,'V':3,'M':7,'B':6,'D':2,'C':1}

我通过提取值并附加“~”来形成查找键

>>> '~'.join(str(di.get(key)) for key in l)

由于此键将构成搜索的核心 - 我需要确认它将始终返回相同的字符串。
到目前为止,我的测试没有显示任何其他情况。
任何预警都会有用。

最佳答案

是的,这将产生始终以相同顺序出现的结果,除非您更改列表。集合和字典是无序的,即使它们看起来有一个您可以依赖的顺序,但它们却没有。有一个明确的顺序,但你不能指望它是你所期望的——例如,在 Python 3.3 中,每次启动解释器时顺序都会改变,因为散列中添加了盐。

但是,元组和列表具有已定义的顺序。除非您更改列表或用不同的元组替换元组,否则您使用的键将始终采用相同的顺序。

您所写的内容相当于:

result = []

# l has a consistent order, so the result will be in the order of l
for key in l:
    result.append(str(di.get(key)))

'~'.join(result)

..如果列表中的值不是字典中的键,它将失败并出现 TypeError,因此您也不会得到像“3~~1”这样的字符串。

关于python - 按顺序查找字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16869776/

相关文章:

python - cx_Freeze 构建错误

python - 使用 Flask-WTForms 选择性地要求一个字段的正确方法是什么?

python - Flask 和减少 mysql 查询的最佳方法,也许是 celery?

python - 条形图中的重叠名称

python - 在 Linux 中调试从另一个 C++ 应用程序启动的 python 脚本

python - 如何在 Ubuntu 14.04 中安装 pyv8?

python - @list_route 和@detail_route 嵌套路由不会出现在 Browseable API 中

python - 为什么这段代码有这个错误: "Expected:)"?

python - 包 'see' 本身是否在 __init__.py 中?

python - python 中与 perl $conf{svnlook} log --revision $rev $repo 中此代码行的等效项是什么