1

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

>>> 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)

由于这个键将构成搜索的核心——我需要确认它总是返回相同的字符串。
到目前为止,我的测试中没有任何内容表明其他情况。
任何预警都是有用的。

4

2 回答 2

1

是的,这将产生始终以相同顺序出现的结果,除非您更改列表。Sets 和 dicts 是无序的,即使它们看起来有你可以依赖的顺序,它们也没有。有一个明确的顺序,你不能指望它是你所期望的——例如,在 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”这样的字符串。

于 2013-06-01T06:42:39.383 回答
0

如果我理解正确,这就是您需要的:

 '~'.join(str(di.get(key)) for key in l if di.get(key) is not None)
于 2013-06-01T06:48:14.460 回答