在字典中排序python字典

2024-03-28 14:15:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在整理一本词典。我的字典看起来是这样的,只是还有几百万个条目有不同的用户名、日期和数字:

{'RandomUserName': defaultdict(<type 'int'>, {'6/30/15': 2}), 
'AnotherRandomUserName': defaultdict(<type 'int'>, {'5/25/16': 8}), 
'AThirdRandomUserName': defaultdict(<type 'int'>, {'1/12/15': 5})}

我想根据词条末尾的数字对这本词典排序。我知道对字典进行排序是不可能的,而且只能返回排序后的表示形式。这正是我想做的。你知道吗

我一直在寻找关于如何在字典中对字典进行排序的答案,但是所有的答案都假设我们在值之前知道键。如果我们没有呢?如何根据末尾的整数对其排序?你知道吗

非常感谢,我很感激你的回答!你知道吗


Tags: 答案字典排序type条目数字整理用户名
1条回答
网友
1楼 · 发布于 2024-03-28 14:15:28

我想到的第一个解决方案是将单词表展平,然后对结果列表进行排序。你知道吗

例如:

dictionary_of_dictionaries = {
    'RandomUserName':  {'6/30/15': 2}, 
    'AnotherRandomUserName': {'5/25/16': 8}, 
    'AThirdRandomUserName': {'1/12/15': 5}
}


flattened = [(k,) + tuple(dic.iteritems()) for k, dic in dictionary_of_dictionaries.iteritems()]
print flattened

印刷品:

[('AnotherRandomUserName', ('5/25/16', 8)), ('RandomUserName', ('6/30/15', 2)), ('AThirdRandomUserName', ('1/12/15', 5))]

然后排序这个列表

flattened.sort(key= lambda x:x[1][1])
print flattened

然后按所需顺序打印条目。

[('RandomUserName', ('6/30/15', 2)), ('AThirdRandomUserName', ('1/12/15', 5)), ('AnotherRandomUserName', ('5/25/16', 8))]

请注意,在第一个解决方案中,我假设第二个字典只包含一个日期字段。在一个更复杂的例子中,您必须确保内部dictionary的元组总是按相同的顺序展开。你知道吗


解决此问题的解决方案(如果您的内部词典包含大量字段,则不会有很好的性能)

dictionary_of_dictionaries = {
    'RandomUserName':  {'6/30/15': 2 , 'name' : 'foo'}, 
    'AnotherRandomUserName': {'5/25/16': 8, 'name' : 'bar'}, 
    'AThirdRandomUserName': {'1/12/15': 5, 'name' : 'baz' }
}


flattened = [(k,) + tuple(sorted(dic.iteritems(), key=lambda x: x[0])) for k, dic in dictionary_of_dictionaries.iteritems()]
print flattened


flattened.sort(key= lambda x:x[1][1])
print flattened

相关问题 更多 >