2011-11-02 14 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 
相關問題