假设我有一个查找列表和一个字典:
>>> 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)
由于这个键将构成搜索的核心——我需要确认它总是返回相同的字符串。
到目前为止,我的测试中没有任何内容表明其他情况。
任何预警都是有用的。
假设我有一个查找列表和一个字典:
>>> 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)
由于这个键将构成搜索的核心——我需要确认它总是返回相同的字符串。
到目前为止,我的测试中没有任何内容表明其他情况。
任何预警都是有用的。
是的,这将产生始终以相同顺序出现的结果,除非您更改列表。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”这样的字符串。
如果我理解正确,这就是您需要的:
'~'.join(str(di.get(key)) for key in l if di.get(key) is not None)