字典嵌套
字典的键可以是简单的数字、字符串,也可以是元组;基对应的值可以是Python语言支持的任何类型对象,如除了数字、字符串、还可以是列表、元组、字典等。由此产生了字典嵌套使用的问题。这里主要介绍字典嵌入字典、列表嵌入字典、字典嵌入列表三种情况的用法。
字典嵌入字典
在多重关系、多行记录的情况下,可以考虑字典嵌入字典的方法,如表所示为一家餐厅就餐记录内容。一个餐厅的每张桌子对应着若干个顾客的就餐记录,每个顾客对应着消费金额,显然一个餐厅记录数据涉及两层关系,一张桌子的若干消费记录卸任一行记录,那么N张桌子有N行记录,属于多行记录情况。
no1 = {'张三':35.5, '李四':200, '王五':800}
no2 = {'Tom':99.8, 'John':183,'Jim':429}
no3 = {'阿毛':12, '阿狗':33}
rest = {'1号':no1, '2号':no2, '3号':no3}
rest
{'1号': {'张三': 35.5, '李四': 200, '王五': 800},
'2号': {'Tom': 99.8, 'John': 183, 'Jim': 429},
'3号': {'阿毛': 12, '阿狗': 33}}
字典嵌入字典记录数据的方式具有如下优点.
1)可以很方便体现数据之间的关系,如"1号"桌对应的就餐记录在字典变量no1里, 而no1里记录了三个消费者消费信息.
2)体现了字典记录数据的灵活性,如横向的可以记录两个消费者的记录,也可以记录三个消费者的记录;竖向的可以记录三行记录,也可以记录五行 ,十行…
在上述代码的基础上继续统计当天该餐厅的总消费额.
no1 = {'张三':35.5, '李四':200, '王五':800}
no2 = {'Tom':99.8, 'John':183,'Jim':429}
no3 = {'阿毛':12, '阿狗':33}
rest = {'1号':no1, '2号':no2, '3号':no3}
rest
total = 0
for get_values in rest.values():
total += sum(get_values.values())
print("餐厅今天营业额为{:.2f}".format(total))
餐厅今天营业额为1792.30
列表嵌入字典
若餐厅老板不关心就餐者是谁,只关心每一桌一天的收入多少,则可以采用列表嵌入字典的方式来实现.
L1 = [35.5, 200, 800]
L2 = [99.8, 183, 429]
L3 = [12, 33]
rest = {'1号桌消费':L1, '2号桌消费':L2, "3号桌消费":L3}
for get_k, get_L in rest.items():
print("{}:{:.2f}元".format(get_k, sum(get_L)))
dict_items([('1号桌消费', [35.5, 200, 800]), ('2号桌消费', [99.8, 183, 429]), ('3号桌消费', [12, 33])])
1号桌消费:1035.50元
2号桌消费:711.80元
3号桌消费:45.00元
字典嵌入列表
若该餐厅的客户经理想了解一下每桌就餐明细,并分类统计每桌消费额,则可以采用吓方法:
no1 = {'张三':35.5, '李四':200, '王五':800}
no2 = {'Tom':99.8, 'John':183,'Jim':429}
no3 = {'阿毛':12, '阿狗':33}
list1 = [no1, no2, no3]
list1
i = 0
total = 0
r_L =len(list1)
get_d = {}
sum1 = 0
while i < r_L:
get_d = list1[i]
sum1 =sum(get_d.values())
total += sum1
print(get_d)
print("第{}桌日消费:{:.2f}".format(i+1, sum1))
i +=1
print("该餐厅日消费总额为:{}".format(total))
{'张三': 35.5, '李四': 200, '王五': 800}
第1桌日消费:1035.50
{'Tom': 99.8, 'John': 183, 'Jim': 429}
第2桌日消费:711.80
{'阿毛': 12, '阿狗': 33}
第3桌日消费:45.00
{'阿毛': 12, '阿狗': 33}
该餐厅日消费总额为:1792.3