[英]How to reverse order of keys in python dict?
這是我的代碼:
a = {0:'000000',1:'11111',3:'333333',4:'444444'}
for i in a:
print i
表明:
0
1
3
4
但我希望它顯示:
4
3
1
0
那么,我能做什么?
迭代的順序鍵是任意的。 他們按順序排列只是巧合。
>>> a = {0:'000000',1:'11111',3:'333333',4:'444444'}
>>> a.keys()
[0, 1, 3, 4]
>>> sorted(a.keys())
[0, 1, 3, 4]
>>> reversed(sorted(a.keys()))
<listreverseiterator object at 0x02B0DB70>
>>> list(reversed(sorted(a.keys())))
[4, 3, 1, 0]
由於Python 3.7 dicts保留 order ,這意味着您現在可以執行此操作:
my_dict = {'a': 1, 'c': 3, 'b': 2}
for k in reversed(list(my_dict.keys())):
print(k)
輸出:
b
c
a
由於Python 3.8內置的reversed()
接受字典,因此您可以使用:
for k in reversed(my_dict):
print(k)
字典是無序的,因此您無法反轉它們。 電流輸出的順序是任意的。
也就是說,您當然可以訂購鑰匙:
for i in sorted(a.keys(), reverse=True):
print a[i];
但這為您提供了排序鍵的相反順序,不一定是鍵添加方式的相反順序。 即,如果您的字典是:它不會給您1 0 3
:
a = {3:'3', 0:'0', 1:'1'}
嘗試:
for i in sorted(a.keys(), reverse=True):
print i
Python 詞典沒有任何關聯的“順序”。 dict 打印相同的順序只是一個“巧合”。 不能保證字典中的項目以任何順序出現。
如果要處理排序,則需要將字典轉換為列表。
a = list(a) # keys in list
a = a.keys() # keys in list
a = a.values() # values in list
a = a.items() # tuples of (key,value) in list
現在您可以正常對列表進行排序,例如a.sort()
並將其反轉,例如a.reverse()
Python dict 在 2.x 中沒有排序。 但是在3.1 中有一個有序的 dict 實現。
for i in reversed(sorted(a.keys())):
print i
在我使用的 Python 3.6 中,我在函數更新的幫助下顛倒了鍵及其各自值的順序。
original_dict={'A':0,'C':2,'B':1}
new_dict={}
for k,v in original_dict.items():
dict_element={k:v}
dict_element.update(new_dict)
new_dict=dict_element
print(new_dict)
它應該打印出來:
{'B':1,'C':2,'A':0}
我的 2 美分。
如果要保留插入順序而不是字母順序,則可以使用:
dict(list(your_dict.keys())[::-1])
或者對於整個字典:
dict(list(your_dict.items())[::-1])
如果你有一本這樣的字典
{'faisal2': 2, 'umair': 2, 'fais': 1, 'umair2': 1, 'trending': 2, 'apple': 2, 'orange': 2}
並且您想要反向排序字典,您可以使用:
dict(sorted(counts.items(), key=lambda item: item[1],reverse=True))
輸出將是:
{'faisal2': 2, 'umair': 2, 'trending': 2, 'apple': 2, 'orange': 2, 'fais': 1, 'umair2': 1}
你試一試,
輸入: a = {0:'000000',1:'11111',3:'333333',4:'444444'}
[x for x in sorted(a.keys(), reverse=True)]
輸出: [4, 3, 1, 0]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.