我有以下字典:
named_sets = {'DMXAA':set(['1441326_at', '1460062_at']), 'cdiGMP':set(['1441326_at', '1460062_at']),'cGAMP': set(['1441326_at', '1460062_at']) }
我想要做的是使用不区分大小写来执行密钥排序 并将它们存储在OrderedDict中产生:
OrderedDict([
('cdiGMP', set(['1441326_at', '1460062_at'])),
('cGAMP', set(['1441326_at', '1460062_at'])),
('DMXAA', set(['1441326_at', '1460062_at'])),
])
我尝试了但失败了:
from collections import OrderedDict
named_sets = {'DMXAA':set(['1441326_at', '1460062_at']), 'cdiGMP':set(['1441326_at', '1460062_at']),'cGAMP': set(['1441326_at', '1460062_at']) }
OrderedDict(sorted(named_sets.items()))
给出:
OrderedDict([('DMXAA', set(['1441326_at', '1460062_at'])), ('cGAMP', set(['1441326_at', '1460062_at'])), ('cdiGMP', set(['1441326_at', '1460062_at']))])
答案 0 :(得分:3)
您需要提供key
函数来对案例不敏感地进行排序。
在Python 3上你使用str.casefold()
function,在Python 2上坚持str.lower()
很好:
OrderedDict(sorted(named_sets.items(), key=lambda i: i[0].lower()))
注意lambda
;您正在排序键值对,但set
对象不可订购,因此您只想返回密钥,折叠后无需比较即可进行比较。
演示:
>>> from collections import OrderedDict
>>> named_sets = {'DMXAA':set(['1441326_at', '1460062_at']), 'cdiGMP':set(['1441326_at', '1460062_at']),'cGAMP': set(['1441326_at', '1460062_at']) }
>>> OrderedDict(sorted(named_sets.items(), key=lambda i: i[0].lower()))
OrderedDict([('cdiGMP', set(['1441326_at', '1460062_at'])), ('cGAMP', set(['1441326_at', '1460062_at'])), ('DMXAA', set(['1441326_at', '1460062_at']))])
>>> _.keys()
['cdiGMP', 'cGAMP', 'DMXAA']