我有以下集合字典:
named_sets = {'DMXAA':set(['1441326_at', '1460062_at']), 'cdiGMP':set(['1441326_at', '1460062_at']),'cGAMP': set(['1441326_at', '1460062_at']) }
Run Code Online (Sandbox Code Playgroud)
我想要做的是使用不区分大小写的键排序并将它们存储在 OrderedDict 中产生:
OrderedDict([
('cdiGMP', set(['1441326_at', '1460062_at'])),
('cGAMP', set(['1441326_at', '1460062_at'])),
('DMXAA', set(['1441326_at', '1460062_at'])),
])
Run Code Online (Sandbox Code Playgroud)
我试过这个但失败了:
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()))
Run Code Online (Sandbox Code Playgroud)
这给出了:
OrderedDict([('DMXAA', set(['1441326_at', '1460062_at'])), ('cGAMP', set(['1441326_at', '1460062_at'])), ('cdiGMP', set(['1441326_at', '1460062_at']))])
Run Code Online (Sandbox Code Playgroud)
您需要提供一个key功能来不区分大小写地排序。
在 Python 3 上你会使用str.casefold()function,在 Python 2 上坚持str.lower()是好的:
OrderedDict(sorted(named_sets.items(), key=lambda i: i[0].lower()))
Run Code Online (Sandbox Code Playgroud)
注意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']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1341 次 |
| 最近记录: |