Python:删除顶部' n'字典中的键

时间:2014-09-12 13:01:03

标签: python sorting dictionary

我有一本字典词典。对于dict中的每个键,都有一个列表,其中包含两个项目。一个是另一个字典,另一个是整数。

dict = {
    'hello' : [
      {
         'blah' : 1,
         'dodo' : 2
      },
      3
    ],
    'world' : [
      {
         'foo' : 7,
         'bar' : 1
      },
      8
    ]
 }

我想在列表中的第二项(整数)上对字典dict进行排序。然后从字典中删除第一个'n'键。有什么办法吗?已排序的函数仅适用于列表。

以下是我正在尝试执行此操作的功能。

def create_inverted_index(inverted_index, corpus_tokens, corpus_files):
for file_tokens in corpus_tokens:
    file_id = corpus_files[file_tokens[0]]
    for token in file_tokens[1]:
        if token in inverted_index.keys():
            inverted_index[token][1] += 1
            if file_id in inverted_index[token][0].keys():
                inverted_index[token][0][file_id] += 1
            else:
                inverted_index[token][0][file_id] = 1
        else:
            inverted_index[token] = [{file_id : 1}, 1]

2 个答案:

答案 0 :(得分:3)

你可以这样做:

d = {1: [1, 2], 3: [2,4], 4:[3,3], 2:[4,1], 0:[5,0]} # dict to remove items from

sorted_list=sorted(d.items(), key=lambda x: x[1][1])
sorted_keys = [key[1] for key in sorted_list]

n=2 # number of items to remove
for key in sorted_keys[0:n]:
    d = dict([(k,v) for k,v in d.items() if v != key ])

此代码将dict复制到dict值中第二项所订购的列表。然后它创建一个只包含已排序键的列表,并迭代它,将它们作为字典中的值删除。

对于我的d和n=3的值,输出为:

{3: [2, 4], 4: [3, 3]}

对于n = 2:

{1: [1, 2], 3: [2, 4], 4: [3, 3]}

Ps:这可能不是最有效的方式,但是做了工作

答案 1 :(得分:1)

在Python中,词典没有订单。您无法对dict进行排序。但是,您可以查看collections.OrderedDict