2011-11-02 28 views
3

例子:如何迭代不区分大小写的已排序字典项目?

>>> d = {'answer':1, 'Question':2} 
>>> for i, j in sorted(d.items()): print i 
Question 
answer 

我想不区分大小写名单:

answer 
Question 

,我相信它可以简单的Python的方式来完成。

+0

下面的代码片段不适用于西里尔字(UTF-8编码)。在这种情况下,'.lower()'不起作用,所以我自由地扩展了这个问题。如果没有提供答案,我会在下面选择'jellybean'回答问题 – theta

回答

6

如果它只是打印键:

for i in sorted(d.keys(), key=lambda x: x.lower()): print i 

如果您需要的值之后,你可以做

for i, j in sorted(d.items(), key=lambda x: x[0].lower()): print i, j 

编辑:更短,更好(因为你有d在范围内):

for i in sorted(d, key=str.lower): 
    print i, d[i] 
+0

对不起,我在 – theta

+0

问题下面添加了评论@zetah:要对utf-8编码键进行排序,请先将它们转换为unicode:'sorted(d.items() ,key = lambda x:x [0] .decode('utf-8')。lower())'。 – unutbu

+0

噢,我非常讨厌使用Python而不是ASCII。我试图让自己的'lower'函数像'def clower(word,r):\ n word = r [word [0]] + word [1:] \ n return word'其中r是字典映射替代品,但我无法编码/解码错误。你的代码片段也不行,例如'x ='Питон''或'x =u'Питон'.encode('utf-8')'或'x =r'Питон''都返回'UnicodeDecodeError:'utf8'编解码器无法解码位置0的字节0xd0:数据在'x [0] .decode('utf-8')'上出现意外结束。我不能等待Python 3成为主要发行版 – theta

3
import string 
sorted(d.items(), key=string.lower) 
2
for k in sorted(d, key=lambda k: k.lower()): 
    print k 
相关问题