簡體   English   中英

如何在python中用列表對字典進行排序

[英]How to sort dictionary with lists in python

我有一本字典如下。

my_d={"0":["code_5", "code_4", "code_10"],
 "1":["code_1", "code_2", "code_3", "code_11"], 
"2": ["code_7", "code_8"], "3": ["code_9"]}

我想通過考慮字典列表中元素的數量來對字典進行排序。 即為"1": ["code_1", "code_2", "code_3"]具有3個元素,因此應放在字典的第一位。 因此,我的輸出應如下所示。

my_d = {"1":["code_1", "code_2", "code_3", "code_11"],
 "0":["code_5", "code_4", "code_10"],
 "2": ["code_7", "code_8"], "3": ["code_9"]}

現在,我只想獲取字典的前2個鍵。 因此,我的最終輸出應如下所示。

my_d={"1": ["code_1", "code_2", "code_3", "code_11"],
 "0":["code_5", "code_4", "code_10"]}

我的文件很大。 所以我想要一種快速有效的方式在python中做到這一點。 請幫我!

你可以這樣嘗試

a =list(sorted(my_d.items(),key = lambda x:len(x[1]),reverse = True)[0:2]
print a
Out[94]: 
    [('1', ['code_1', 'code_2', 'code_3', 'code_11']),
     ('0', ['code_5', 'code_4', 'code_10'])]

 In [95]: dict(a)
 Out[95]: 
    {'0': ['code_5', 'code_4', 'code_10'],
     '1': ['code_1', 'code_2', 'code_3', 'code_11']}

一句話你的答案是

a =dict(list(sorted(my_d.items(),key = lambda x:len(x[1]),reverse = True))[0:2])

正如評論中指出的那樣,不能保證字典中鍵的順序,如果需要,您必須使用Python collections OrdredDict

from collections import OrderedDict
x = OrderedDict(sorted(my_d.iteritems(), key=lambda x:len(x[1]), reverse=True))

這樣,新的dict x將保留您要查找的順序。

  • 將字典轉換為數組
  • 根據第二個索引對數組進行排序
  • 切片最后兩個元素
  • 將數組轉換回字典

對於您的用例,以下解決方案可能會有點貴。 基本上是

my_d={"0":["code_5", "code_4", "code_10"], "1":["code_1", "code_2", "code_3", "code_11"], 
"2": ["code_7", "code_8"], "3": ["code_9"]}

# Convert to array
k = list(my_d.items())

# Ascending sort
k.sort(key=lambda x: len(x[1]))

# Slice last two elements
k = k[-2:]

# Convert back to dictionary
dict = {}
for i in range(len(k)):
     dict[k[i][0]] = k[i][1]

dict將包含所需的輸出

暫無
暫無

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

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