按顺序查找字段

时间:2013-06-01 06:23:22

标签: 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)

由于此密钥将构成搜索的核心 - 我需要确认它将始终返回相同的字符串 到目前为止,我的测试中没有任何内容可以反映出来 任何预警都会有用。

2 个答案:

答案 0 :(得分:1)

是的,除非您更改列表,否则这将产生始终以相同顺序出现的结果。集合和dicts是无序的,即使它们似乎有一个你可以依赖的订单,它们也不会。有一个确定的顺序,你不能指望它是你期望的 - 例如,在Python 3.3中,每次启动解释器时顺序都会改变,因为哈希值会添加一个salt。

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

你所写的内容相当于:

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)

..如果列表中的值不是dict中的键,它将失败并返回TypeError,因此您不会获得类似" 3 ~~ 1"的字符串。

答案 1 :(得分:0)

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

 '~'.join(str(di.get(key)) for key in l if di.get(key) is not None)