簡體   English   中英

使用另一個Python列表按鍵對Python詞典進行排序

[英]Sort Python dictionary by it's keys using another Python list

我有一個list的話:

['apple', 'zoo', 'chicken', 'needle', 'car', 'computer']

我還有一dictionary包含鍵和值的dictionary

{'zoo': 42, 'needle': 32, 'computer': 18, 'apple': 39, 'car': 11, 'chicken': 12}

dictionary的鍵全部來自單詞list 如何對dictionary進行排序,使其鍵的順序與list單詞的順序相同? 因此,一旦排序,我的dictionary應如下所示:

{'apple': 39, 'zoo': 42, 'chicken': 12, 'needle': 32, 'car': 11, 'computer': 18}

非常感謝!

對於版本低於3.6的python,字典不保持順序,因此無法對字典進行排序。

您可以使用collections.OrderedDict以所需的順序構建新詞典:

In [269]: from collections import OrderedDict

In [270]: keys = ['apple', 'zoo', 'chicken', 'needle', 'car', 'computer']
     ...: dict_1 = {'zoo': 42, 'needle': 32, 'computer': 18, 'apple': 39, 'car': 11, 'chicken': 12}
     ...: 

In [271]: dict_2 = OrderedDict()

In [272]: for k in keys:
     ...:     dict_2[k] = dict_1[k]
     ...:     

In [273]: dict_2
Out[273]: 
OrderedDict([('apple', 39),
             ('zoo', 42),
             ('chicken', 12),
             ('needle', 32),
             ('car', 11),
             ('computer', 18)])

在Python3.6中,一個簡單的dict理解就足夠了:

>>> {x : dict_1[x] for x in keys}
{'apple': 39, 'zoo': 42, 'chicken': 12, 'needle': 32, 'car': 11, 'computer': 18}

由於常規字典是無序的,因此可以使用OrderedDict。 對於您的情況,您可以這樣做:

from collections import OrderedDict
od = OrderedDict()

ll = ['apple', 'zoo', 'chicken', 'needle', 'car', 'computer']
d = {'zoo': 42, 'needle': 32, 'computer': 18, 'apple': 39, 'car': 11, 'chicken': 12} 

for f in ll:
  od[f] = d[f]
#Outputs: OrderedDict([('apple', 39), ('zoo', 42), ('chicken', 12), ('needle', 32), ('car', 11), ('computer', 18)])

Python dict默認情況下不保留訂單,您應該使用collections.OrderedDict 放入OrderedDict的第一項是枚舉時將獲得的第一項(例如,使用for )。

from collections import OrderedDict

order_list = ['apple', 'zoo', 'chicken', 'needle', 'car', 'computer']
unordered_dict = {'zoo': 42, 'needle': 32, 'computer': 18, 'apple': 39, 'car': 11, 'chicken': 12}
ordered_dict = OrderedDict()
for item in order_list:
    ordered_dict[item] = unordered_dict[item]

for k, v in unordered_dict.items():
    print(k, v)

for k, v in ordered_dict.items():
    print(k, v)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM