用python将字典中的字典展平为列表

用python将字典中的字典展平为列表,python,mysql,list,dictionary,Python,Mysql,List,Dictionary,我有一本字典,需要把它整理成一个列表。我的目标是以一种可以发送到MySQL数据库的形式提供它。这本词典的格式是 { 'Customer 1': {'Vitamin A': 0, 'Calcium': 1, 'Protein': 1, 'B vitamins': 0, 'HPMR': 0}, 'Customer 2': {'Vitamin A': 0, 'Calcium': 0, 'Protein': 1, 'B vitamins': 1, 'HPMR': 0} } 我希望

我有一本字典,需要把它整理成一个列表。我的目标是以一种可以发送到MySQL数据库的形式提供它。这本词典的格式是

{
 'Customer 1': 
   {'Vitamin A': 0, 'Calcium': 1, 'Protein': 1, 'B vitamins': 0, 'HPMR': 0},
 'Customer 2': 
   {'Vitamin A': 0, 'Calcium': 0, 'Protein': 1, 'B vitamins': 1, 'HPMR': 0}
 }
我希望它的结局是:

('Customer 1', 'Vitamin A', 0), ('Customer 1', 'Calcium', 1)
...
('Customer 2', 'Vitamin A', 0), ('Customer 2', 'Calcium', 0)`
谢谢你的帮助

customers = {'Customer 1': {'Vitamin A': 0, 
                            'Calcium': 1, 
                            'Protein': 1, 
                            'B vitamins': 0, 
                            'HPMR': 0}, 
             'Customer 2': {'Vitamin A': 0, 
                            'Calcium': 0, 
                            'Protein': 1, 
                            'B vitamins': 1, 
                            'HPMR': 0}}
all_orders = []
for customer, order in customers.items():
    customer_orders = [(customer, vitamin, quantity) for vitamin, quantity in order.items()]
    all_orders.append(customer_orders)

all_orders = [[('Customer 2', 'Calcium', 0),
               ('Customer 2', 'Vitamin A', 0),
               ('Customer 2', 'HPMR', 0),
               ('Customer 2', 'Protein', 1),
               ('Customer 2', 'B vitamins', 1)],
              [('Customer 1', 'Calcium', 1),
               ('Customer 1', 'Vitamin A', 0),
               ('Customer 1', 'HPMR', 0),
               ('Customer 1', 'Protein', 1),
               ('Customer 1', 'B vitamins', 0)]]
或者使用
itertools.chain()

或者使用
itertools.chain()

输出:
[(“客户2”,“钙”,0),(“客户2”,“维生素A”,0),(“客户2”,“HPMR”,0),(“客户2”,“蛋白质”,1),(“客户2”,“维生素B”,1),(“客户1”,“钙”,1),(“客户1”,“维生素A”,0),(“客户1”,“HPMR”,0),(“客户1”,“蛋白质”,1),(“客户1”,“维生素B”,0)]

另外,您要插入的是列表的元组,而不是列表

输出:
[(“客户2”,“钙”,0),(“客户2”,“维生素A”,0),(“客户2”,“HPMR”,0),(“客户2”,“蛋白质”,1),(“客户2”,“维生素B”,1),(“客户1”,“钙”,1),(“客户1”,“维生素A”,0),(“客户1”,“HPMR”,0),(“客户1”,“蛋白质”,1),(“客户1”,“维生素B”,0)]


另外,您插入的是列表的元组,而不是列表。

我也像其他人一样想到了列表理解:

cust = {'Customer 1': {'Vitamin A': 0, 'Calcium': 1, 'Protein': 1, 'B vitamins': 0, 'HPMR': 0}, 'Customer 2': {'Vitamin A': 0, 'Calcium': 0, 'Protein': 1, 'B vitamins': 1, 'HPMR': 0}}
cust_flat = [ (k, k2, v2) for k2, v2 in v.iteritems() for k, v in cust.iteritems() ]
结果如下:

[('Customer 2', 'Calcium', 1),
 ('Customer 1', 'Calcium', 1),
 ('Customer 2', 'Vitamin A', 0),
 ('Customer 1', 'Vitamin A', 0),
 ('Customer 2', 'HPMR', 0),
 ('Customer 1', 'HPMR', 0),
 ('Customer 2', 'Protein', 1),
 ('Customer 1', 'Protein', 1),
 ('Customer 2', 'B vitamins', 0),
 ('Customer 1', 'B vitamins', 0)]

我也像其他人一样想到了一个列表:

cust = {'Customer 1': {'Vitamin A': 0, 'Calcium': 1, 'Protein': 1, 'B vitamins': 0, 'HPMR': 0}, 'Customer 2': {'Vitamin A': 0, 'Calcium': 0, 'Protein': 1, 'B vitamins': 1, 'HPMR': 0}}
cust_flat = [ (k, k2, v2) for k2, v2 in v.iteritems() for k, v in cust.iteritems() ]
结果如下:

[('Customer 2', 'Calcium', 1),
 ('Customer 1', 'Calcium', 1),
 ('Customer 2', 'Vitamin A', 0),
 ('Customer 1', 'Vitamin A', 0),
 ('Customer 2', 'HPMR', 0),
 ('Customer 1', 'HPMR', 0),
 ('Customer 2', 'Protein', 1),
 ('Customer 1', 'Protein', 1),
 ('Customer 2', 'B vitamins', 0),
 ('Customer 1', 'B vitamins', 0)]
cust = {'Customer 1': {'Vitamin A': 0, 'Calcium': 1, 'Protein': 1, 'B vitamins': 0, 'HPMR': 0}, 'Customer 2': {'Vitamin A': 0, 'Calcium': 0, 'Protein': 1, 'B vitamins': 1, 'HPMR': 0}}
cust_flat = [ (k, k2, v2) for k2, v2 in v.iteritems() for k, v in cust.iteritems() ]
[('Customer 2', 'Calcium', 1),
 ('Customer 1', 'Calcium', 1),
 ('Customer 2', 'Vitamin A', 0),
 ('Customer 1', 'Vitamin A', 0),
 ('Customer 2', 'HPMR', 0),
 ('Customer 1', 'HPMR', 0),
 ('Customer 2', 'Protein', 1),
 ('Customer 1', 'Protein', 1),
 ('Customer 2', 'B vitamins', 0),
 ('Customer 1', 'B vitamins', 0)]