首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按顺序查找字段

按顺序查找字段
EN

Stack Overflow用户
提问于 2013-06-01 14:23:22
回答 2查看 100关注 0票数 1

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

代码语言:javascript
运行
复制
>>> l=['A','B','C']
>>> di={'A':3,'V':3,'M':7,'B':6,'D':2,'C':1}

我正在通过提取值并附加'~‘来形成一个查找键

代码语言:javascript
运行
复制
>>> '~'.join(str(di.get(key)) for key in l)

因为这个键将构成搜索的核心-我需要确认它总是返回相同的字符串。

到目前为止,我的测试中没有显示出任何不同的情况。

任何预警都是有用的。

EN

回答 2

Stack Overflow用户

发布于 2013-06-01 14:42:39

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

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

您所写的内容相当于:

代码语言:javascript
运行
复制
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)

如果列表中的值不是字典中的关键字,那么..it将失败并返回TypeError,因此您也永远不会得到像“3~1”这样的字符串。

票数 1
EN

Stack Overflow用户

发布于 2013-06-01 14:48:14

如果我没理解错的话,这就是你需要的:

代码语言:javascript
运行
复制
 '~'.join(str(di.get(key)) for key in l if di.get(key) is not None)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16869776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档