如何对字典进行不区分大小写的排序并将其存储在有序字典中

7

我有以下的集合字典:

named_sets  = {'DMXAA':set(['1441326_at', '1460062_at']), 'cdiGMP':set(['1441326_at', '1460062_at']),'cGAMP': set(['1441326_at', '1460062_at'])  }

我想要做的是对键进行不区分大小写的排序,并将它们存储在有序字典中,结果如下:
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()))

that gives:

OrderedDict([('DMXAA', set(['1441326_at', '1460062_at'])), ('cGAMP', set(['1441326_at', '1460062_at'])), ('cdiGMP', set(['1441326_at', '1460062_at']))])
1个回答

11

你需要提供一个key函数来实现不区分大小写的排序。

在Python 3中,你可以使用str.casefold()函数,而在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']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接