[英]How to sort nested python dictionary using item's sub-value
如何按子值对嵌套的 Python 字典项进行排序并按降序保存该字典项
说明字典:
排序前
my_dict = {
"Bob": {"Buy": 25, "Sell": 33, "Quantity": 100},
"Moli": {"Buy": 75, "Sell": 53, "Quantity": 300},
"Annie": {"Buy": 74, "Sell": 83, "Quantity": 96},
"Anna": {"Buy": 55, "Sell": 83, "Quantity": 154},
}
我想按其子值(即“数量”)按降序对字典项进行排序,输出应如下所示:
排序后
my_dict={
"Moli": {"Buy": 75, "Sell": 53, "Quantity": 300},
"Anna": {"Buy": 55, "Sell": 83, "Quantity": 154},
"Bob": {"Buy": 25, "Sell": 33, "Quantity": 100},
"Annie": {"Buy": 74, "Sell": 83, "Quantity": 96},
}
如何在不使用任何功能的情况下做到这一点,例如:
def sort_by_quantity(dic):
keys = sorted(dic.items(), key=lambda x: x[1]['Quantity']) # list of sorted keys
return dict((x, y) for x, y in keys) # convert tuple back to dict
或者
sdct = dictt.copy()
def func(d):
return sdct[d]['Quantity']
dct = sorted(dictt, key=func, reverse=True)
newDict = {i: dictt[i] for i in dct}
print(newDict)
等等...
我们在 Pandas 数据框中进行排序的方式如下:
df = df1.sort_values('Quantity', ascending=False)
如果有人告诉我如何做到这一点,我将不胜感激:) :) :)
尝试这个:
my_dict = {
"Bob": {"Buy": 25, "Sell": 33, "Quantity": 100},
"Moli": {"Buy": 75, "Sell": 53, "Quantity": 300},
"Annie": {"Buy": 74, "Sell": 83, "Quantity": 96},
"Anna": {"Buy": 55, "Sell": 83, "Quantity": 154}
}
sorted_dict = dict( sorted(my_dict.items(), key=lambda v: v[1]['Quantity']) )
print(sorted_dict)
# for reverse
sorted_dict_reversed = dict( sorted(my_dict.items(), key=lambda v: v[1]['Quantity'], reverse=True) )
print(sorted_dict_reversed)
如果要在 Python 3.5- 或 Python 3.6 的某些实现中实现此行为,则必须使用collections.OrderedDict
。 在 Python 3.7+ 或 Python 3.6 的某些实现(例如标准 CPython3.6)中,普通dict
与collections.OrderedDict
具有相同的行为。 在这里,我将这些版本称为 3.5-* 和 3.7+* 以表明 3.6 可能包含在这两个版本中,具体取决于您的 Python 实现。
在任何情况下,上述结构都按插入时间对项目进行排序,因此您需要创建一个新对象。
字典理解(仅对 3.7+* 中的dict
有效):
my_new_dict = {k: v for k, v in sorted(my_dict.items(), key=lambda x: x[1]['Quantity'])}
构造函数(对 3.7+* 中的dict
和collections.OrderedDict
向后兼容都有效):
my_new_dict = dict(sorted(my_dict.items(), key=lambda x: x[1]['Quantity']))
from collections import OrderedDict
my_new_dict = OrderedDict(sorted(my_dict.items(), key=lambda x: x[1]['Quantity']))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.