我有以下问题。
class Inventory:
def __init__(self,project_no,country,category,product,count):
self.project_no = project_no
self.country = country
self.category = category
self.product = product
self.count = count
inventory_list = []
inventory_list.append(Inventory(1,'USA','Beverages','Milk',2))
inventory_list.append(Inventory(1,'USA','Beverages','Juice',5))
inventory_list.append(Inventory(1,'USA','Snacks','Potato Chips',2))
inventory_list.append(Inventory(1,'USA','Oils','Canola',5))
inventory_list.append(Inventory(1,'USA','Oils','Olive',8))
inventory_list.append(Inventory(1,'CAN','Beverages','Milk',7))
inventory_list.append(Inventory(1,'CAN','Beverages','Juice',8))
inventory_list.append(Inventory(1,'CAN','Snacks','Potato Chips',8))
inventory_list.append(Inventory(1,'CAN','Oils','Canola',3))
inventory_list.append(Inventory(1,'CAN','Oils','Olive',4))
{'Inventory': [{'Country': inv.country , 'Category' : [{inv.category : [{'Product' : inv.product}]}] } for inv in inventory_list]}这段代码提供了以下输出。
{“库存”:[{“国家”:“美国”,“类别”:[{“饮料”:{“产品”:“牛奶”},{“国家”:“美国”,“类别”:{“饮料”:{“产品”:“果汁”},{“国家”:“美国”,“类别”:“小吃”:“零食”:“产品”:“薯片”}{“国家”:“美国”,“类别”:[{“油”:{‘产品’:‘菜籽油’},{“国家”:‘美国’,‘类别’:[{‘油’:{‘产品’:‘橄榄树’}{‘国家’:'CAN',‘类别’:[{‘饮料’:{‘产品’:‘牛奶}{’国家‘:'CAN',}‘类别’:{‘饮料’:{‘产品’:‘果汁’},{‘国家’:'CAN',‘类别’:[{‘小吃’:{‘产品’:‘薯片’}{‘国家’:'CAN',‘类别’:{‘油’:{‘产品’:‘菜花’},{‘国家’:'CAN',“类别”:[{‘油’:{‘产品’:‘橄榄’}}]}}
我真正需要的更像是下面。
{“库存”:[{“国家”:“美国”,“类别”:[“饮料”:{“产品”:“牛奶”,“计数”:2 },{“产品”:“果汁”,“计数”:5 },{“零食”:{“产品”:“马铃薯片”,“计数”:2 },{“油”:{“产品”:“油菜”,“计数”:5 },{“产品”:“橄榄”,“计数”:8 },{“国家”:“可以”,“类别”:[“饮料”:{“产品”:“牛奶”,“计数”:7 },{“产品”:“果汁”,“计数”:8 },{“零食”:{“产品”:“马铃薯片”,“计数”:8 },{“油”:{“产品”:“油菜籽”,“计数”:3 },{“产品”:“橄榄”,“计数”:4}
怎么做?我认为理解列表是最好的方法。但我在这点上遇到了麻烦。我认为对于python编码器来说,这应该是非常容易的。用我有限的蟒蛇,我只能走这么远。如果有人能帮忙的话。
发布于 2020-01-24 23:38:10
我建议您尝试使用模块序列化您的类。但是,看起来您需要对数据进行一些重新组织。据我所知,您希望有一个inventory,它包含一个countries集合,其中包含一组将products划分为的产品。
首先,让我们定义产品类:
class Product(object):
def __init__(self, name, count):
self.product = name
self.count = count接下来,我们可以将Country类定义为集合Products的容器,该容器在字典中使用类别名称作为键。
class Country(object):
def __init__(self, name):
self.name = name
self.categories = dict()
def add_product_to_category(self, category, product):
if category not in self.categories:
self.categories[category] = []
self.categories[category].append(product)然后,我们可以将库存类重新定义为一组Country对象的容器。
class Inventory(object):
def __init__(self, project_no):
self.project_no = project_no
self.countries = []接下来,我们可以使用简单的方法来用所需的数据填充类。
inv = Inventory(1)
us_set = Country('USA')
us_set.add_product_to_category('Beverages', Product('Milk', 2))
us_set.add_product_to_category('Beverages', Product('Juice', 5))
us_set.add_product_to_category('Snacks', Product('Potato Chips', 2))
us_set.add_product_to_category('Oils', Product('Canola', 5))
us_set.add_product_to_category('Oils', Product('Olive', 8))
canada_set = Country('CAN')
canada_set.add_product_to_category('Beverages', Product('Milk', 7))
canada_set.add_product_to_category('Beverages', Product('Juice', 8))
canada_set.add_product_to_category('Snacks', Product('Potato Chips', 8))
canada_set.add_product_to_category('Oils', Product('Canola', 3))
canada_set.add_product_to_category('Oils', Product('Olive', 4))
inv.countries.append(us_set)
inv.countries.append(canada_set)最后,(实际回答您的问题,lul)要序列化Inventory类,我们必须定义一个编码器来使用:
class MyEncoder(json.JSONEncoder):
def default(self, o):
return o.__dict__现在,我们只需调用json.dumps()来获取序列化的Inventory的字符串输出。
json.dumps(inv, indent=2, cls=MyEncoder)输出不完全是你布置的,但我认为这个方法对你很有用。
{
"project_no": 1,
"countries": [
{
"name": "USA",
"categories": {
"Beverages": [
{
"count": 2,
"product": "Milk"
},
{
"count": 5,
"product": "Juice"
}
],
"Oils": [
{
"count": 5,
"product": "Canola"
},
{
"count": 8,
"product": "Olive"
}
],
"Snacks": [
{
"count": 2,
"product": "Potato Chips"
}
]
}
},
{
"name": "CAN",
"categories": {
"Beverages": [
{
"count": 7,
"product": "Milk"
},
{
"count": 8,
"product": "Juice"
}
],
"Oils": [
{
"count": 3,
"product": "Canola"
},
{
"count": 4,
"product": "Olive"
}
],
"Snacks": [
{
"count": 8,
"product": "Potato Chips"
}
]
}
}
]
}发布于 2020-01-24 23:10:24
尝试使用json模块。
import json
...
inv_json = {'Inventory': [{'Country': inv.country , 'Category' : [{inv.category : [{'Product' : inv.product}]}] } for inv in inventory_list]}
json_formatted_str = json.dumps(x, indent=2)
print(json_formatted_str)https://stackoverflow.com/questions/59904507
复制相似问题