假设我有一个查找列表和一个字典:
>>> 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)因为这个键将构成搜索的核心-我需要确认它总是返回相同的字符串。
到目前为止,我的测试中没有显示出任何不同的情况。
任何预警都是有用的。
发布于 2013-06-01 14:42:39
是的,这将生成始终以相同顺序出现的结果,除非您更改列表。集合和字典是无序的,即使它们看起来有一个你可以依赖的顺序,但实际上并不是。有一个明确的顺序,你不能指望它是你所期望的--例如,在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)如果列表中的值不是字典中的关键字,那么..it将失败并返回TypeError,因此您也永远不会得到像“3~1”这样的字符串。
发布于 2013-06-01 14:48:14
如果我没理解错的话,这就是你需要的:
'~'.join(str(di.get(key)) for key in l if di.get(key) is not None)https://stackoverflow.com/questions/16869776
复制相似问题