<p>这似乎是不区分大小写的字典搜索(<a href="https://stackoverflow.com/questions/3296499/case-insensitive-dictionary-search">This SO question and all its duplicates</a>)的重复问题的一个例子</p>
<p>post建议的解决方案是使用包装器来dict(或收藏.订购信息)像这样:</p>
<pre><code>import collections
class 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())
</code></pre>
<p>在代码中,您只需使用此包装器包装dict,以便执行不区分大小写的键搜索:</p>
<pre><code>data_items = [OrderedDict([('Employee Number', '1'), ('Employee Name', 'Ms. A'), ('RMG SPOC', 'X'), ('Total Experience (yrs)', '3.06'), ('Days Unallocated', '18'), ('Skill Details', 'Manual testing'), ('Contact Number', '1234')]), OrderedDict([('Employee Number', '2'), ('Employee Name', 'Mr. B'), ('RMG SPOC', 'Y'), ('Total Experience (yrs)', '2.51'), ('Days Unallocated', '28'), ('Skill Details', 'Manual Testing'), ('Contact Number', '2345')]), OrderedDict([('Employee Number', '3'), ('Employee Name', 'Mr. C'), ('RMG SPOC', 'Z'), ('Total Experience (yrs)', '1.86'), ('Days Unallocated', '9'), ('Skill Details', 'C++, Manual Testing, Oracle'), ('Contact Number', '4567')]), OrderedDict([('Employee Number', '4'), ('Employee Name', 'Mr. D'), ('RMG SPOC', 'xyz'), ('Total Experience (yrs)', '7.68'), ('Days Unallocated', '23'), ('Skill Details', 'Manual Testing, SQL, HCM'), ('Contact Number', '789')])]
data = CaseInsensitiveDict(data[0])
print(data['EmplOYee NAME'])
# should print 'Ms. A'
print(data['Employee NAME'])
# should print 'Ms. A'
print(data['EmploYee NAME'])
# should print 'Ms. A'
print(data['EmployeE NAME'])
# should print 'Ms. A'
print(data['Employee Name'])
# should print 'Ms. A'
</code></pre>