注意,使字典不区分大小写,无论如何意味着都可能会丢失信息:例如,您将如何“不区分大小写”
{'a': 23, 'A':45}?如果您关心的只是某个键在字典中的位置(即,不在乎与之对应的值),请
set改用一个替代方法-即
theset = set(k.lower() for k in thedict)
(在Python的每个版本中,或者
{k.lower() for k in thedict}由于某些纯粹的装饰性语法糖,如果您对仅在python
2.7或更高版本中工作的代码感到满意;-),并使用进行检查
if k.lower() in theset: ...。
或者,您可以创建一个包装器类,例如,一个只读类…:
import collectionsclass CaseInsensitiveDict(collections.Mapping): def __init__(self, d): self._d = d self._s = dict((k.lower(), k) for k in d) def __contains__(self, k): return k.lower() in self._s def __len__(self): return len(self._s) def __iter__(self): return iter(self._s) def __getitem__(self, k): return self._d[self._s[k.lower()]] def actual_key_case(self, k): return self._s.get(k.lower())
这将保持(无需实际更改原始字典,因此,如果需要的话,仍然可以为它检索所有精确信息)任意可能的多个键值中的任意一个,由于情况“折叠”为单个键,不敏感,并提供字典的所有只读方法(仅带字符串键),以及
actual_key_case返回用于任何给定字符串键的实际大小写混合的方法(或者
None如果该给定字符串键的大小写更改不匹配字典中的任何键)
)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)