尽管事实上我已经看到了很多关于分类的答案,但我还是无法调整解决问题的方法。你知道吗
这是我字典的结构:
OrderedDict([('2018-11', {'NEOCATE JUNIOR WITHOUT FLAVOUR 400 gr.': 8}), ('2017-11', {'NEOCATE JUNIOR WITHOUT FLAVOUR 400 gr.': 804,'ALFAMINO 400 GR.': 4, 'Forticare Orange/Lemon 4 X125ml': 15})])
外部字典的关键字格式为“年”“月” 外部字典的值为{name of product:quantity}格式的字典
内部字典的关键字是产品的名称 内部字典的值是(产品的)数量
我的目标是根据最新日期(最新的为第一个)对外部词典进行排序,根据产品名称的字母顺序对内部词典进行排序。
换句话说:
OrderedDict([('2018-11', {'NEOCATE JUNIOR WITHOUT FLAVOUR 400 gr.': 8}),('2017-11',{'ALFAMINO 400 GR.': 4,'Forticare Orange/Lemon 4 X125ml': 15,'NEOCATE JUNIOR WITHOUT FLAVOUR 400 gr.': 804})])
第一个日期是2018-11,比2017-11“最新” 在内部字典中,如果我有多个记录,比如2017-11的字典,首先是ALFAMINO(以A开头),然后是Forticare(以F开头),以此类推。。你知道吗
这是我的密码:
def warehouse_pending_products(request):
template_name= 'warehouse/warehouse_pending_products.html'
pendingOrdersResult={}
pendingOrdersList=Order.objects.filter(finished=0)
for order in pendingOrdersList:
orderYear=order.invoice_date.year
orderMonth=order.invoice_date.month
orderDate=str(orderYear)+'-'+str(orderMonth)
orderProductsWithoutSerials=ProductSerialNumbers.objects.filter(snumber__isnull=True).filter(order=order.id)#order_by('product__name')
if orderDate in pendingOrdersResult:
for op in orderProductsWithoutSerials:
p_name=op.product.name.encode("utf-8")
if p_name in pendingOrdersResult[orderDate]:
pendingOrdersResult[orderDate][p_name]+=1
else:
pendingOrdersResult[orderDate][p_name]=1
else:
if orderProductsWithoutSerials:
pendingOrdersResult[orderDate]={}
for op in orderProductsWithoutSerials:
p_name=op.product.name.encode("utf-8")
if p_name in pendingOrdersResult[orderDate]:
pendingOrdersResult[orderDate][p_name]+=1
else:
pendingOrdersResult[orderDate][p_name]=1
result = collections.OrderedDict(sorted(pendingOrdersResult.iteritems(), key=lambda (k, v): (pendingOrdersResult[k])))
我的字典是悬而未决的定单结果。你知道吗
result = collections.OrderedDict(sorted(pendingOrdersResult.iteritems(), key=lambda (k, v): (pendingOrdersResult[k])))
给出错误的结果。
听起来您需要分别对每个“内部”字典和“外部”字典调用
sorted
函数。您还需要强制转换内部词典,使其具有可排序的OrderedDict
类型。下面是我能想到的,但可能有更简短/更惯用的方法:尝试以下操作(使用python 3.7.1测试):
编辑:具有避免“c&p”代码的功能:
相关问题 更多 >
编程相关推荐