aoi学院

Aisaka's Blog, School of Aoi, Aisaka University

Python-第7篇《列表和字典:Python的数据表格》

📖 开篇语

还记得第一次用Excel做员工花名册的情景吗?

A列是姓名,B列是部门,C列是工资,D列是入职日期……
一行就是一个员工的完整信息,一列就是所有人的同种信息

今天我们要学的,就是Python里的“Excel表格”——列表和字典。

它们不仅能像Excel一样整齐地存放数据,还能做出更智能的筛选、统计和分析。

准备好让你的数据“活”起来了吗?


🎯 今日学习目标

  • 掌握列表:Python的“有序清单”
  • 学会字典:Python的“信息卡片”
  • 用列表和字典管理投资组合

📋 列表:Python的“有序清单”

什么是列表?

想象你在超市购物,手里拿着一张购物清单:
购物清单 = ["鸡蛋", "牛奶", "面包", "苹果", "酸奶"]
这就是Python的列表——有序、可变、可重复的数据集合。

列表 vs Excel列

Excel列APython列表
A1: 鸡蛋购物清单[0]
A2: 牛奶购物清单[1]
A3: 面包购物清单[2]
1
2
3
4
5
# 创建各种财务清单
员工名单 = ["张三", "李四", "王五", "赵六", "钱七"]
部门列表 = ["财务部", "销售部", "技术部", "人事部", "运营部"]
工资列表 = [8000, 12000, 15000, 9000, 10000]
发票金额 = [580.50, 1200.00, 3500.00, 890.00, 2200.00]

列表的基本操作

  1. 访问元素(像Excel的单元格)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 访问员工名单
    print(f"第一个员工:{员工名单[0]}") # 张三
    print(f"第三个员工:{员工名单[2]}") # 王五
    print(f"最后一个员工:{员工名单[-1]}") # 钱七(负数从后往前数)

    # 修改员工工资
    print(f"张三原工资:{工资列表[0]}")
    工资列表[0] = 8500 # 张三涨工资了
    print(f"张三新工资:{工资列表[0]}")
  2. 切片操作(一次性取一段数据)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 取出前三名员工
    前三名 = 员工名单[0:3] # 从0开始,取3个
    print(f"前三名员工:{前三名}")

    # 取出工资最高的三个(假设已排序)
    高工资 = 工资列表[-3:] # 最后三个
    print(f"最高三个工资:{高工资}")

    # 隔一个取一个
    隔行取 = 员工名单[::2] # 步长为2
    print(f"隔行取:{隔行取}")
  3. 增加删除

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    # 添加新员工
    员工名单.append("孙八") # 在最后添加
    print(f"添加后:{员工名单}")

    # 在指定位置插入
    员工名单.insert(2, "周九") # 在第3个位置插入
    print(f"插入后:{员工名单}")

    # 删除员工
    员工名单.remove("赵六") # 按值删除
    print(f"删除后:{员工名单}")

    # 弹出最后一个
    离职员工 = 员工名单.pop()
    print(f"离职员工:{离职员工}")
    print(f"剩余员工:{员工名单}")
财务实战:商品清单管理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 商品库存管理系统
print("=== 商品库存管理系统 ===")

# 商品清单(名称、单价、库存)
商品名称 = ["笔记本电脑", "无线鼠标", "机械键盘", "显示器", "打印机"]
商品单价 = [4500, 120, 350, 1500, 800]
商品库存 = [50, 200, 80, 30, 15]

# 显示所有商品
print("📦 当前商品清单:")
for i in range(len(商品名称)):
print(f"{i+1}. {商品名称[i]} - 单价:{商品单价[i]}元 - 库存:{商品库存[i]}件")

# 计算库存总价值
总库存价值 = 0
for i in range(len(商品名称)):
总库存价值 += 商品单价[i] * 商品库存[i]

print(f"\n💰 库存总价值:{总库存价值:,}元")

# 查找特定商品
查找商品 = "机械键盘"
if 查找商品 in 商品名称:
索引 = 商品名称.index(查找商品)
print(f"\n🔍 {查找商品}信息:")
print(f"单价:{商品单价[索引]}元")
print(f"库存:{商品库存[索引]}件")
print(f"库存价值:{商品单价[索引] * 商品库存[索引]}元")
else:
print(f"未找到{查找商品}")

# 批量更新价格(涨价10%)
print(f"\n📈 价格调整通知:")
for i in range(len(商品单价)):
原价 = 商品单价[i]
商品单价[i] = round(原价 * 1.1, 2) # 涨价10%
print(f"{商品名称[i]}{原价}元 → {商品单价[i]}元")

📇 字典:Python的“信息卡片”

什么是字典?
如果说列表是“一列数据”,那字典就是“一张完整的记录卡片”。

想象员工信息表:

  • Excel:A1姓名,B1部门,C1工资,D1入职日期
  • Python字典:一张卡片包含所有信息
1
2
3
4
5
6
7
8
9
10
11
12
13
# 员工信息卡片(字典)
员工1 = {
"姓名": "张三",
"部门": "财务部",
"工资": 8000,
"入职日期": "2022-03-15",
"是否正式": True
}

# 访问字典信息
print(f"员工姓名:{员工1['姓名']}")
print(f"所属部门:{员工1['部门']}")
print(f"当前工资:{员工1['工资']}元")

字典 vs Excel行

Excel行1Python字典
A1: 张三员工1[“姓名”]
B1: 财务部员工1[“部门”]
C1: 8000员工1[“工资”]
D1: 2022-03-15员工1[“入职日期”]

字典的基本操作

  1. 创建和访问(像查档案卡片)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    # 客户信息卡片
    客户信息 = {
    "客户编号": "C001",
    "公司名称": "科技创新有限公司",
    "联系人": "李经理",
    "联系电话": "13800138000",
    "地址": "北京市海淀区中关村大街1号",
    "信用等级": "A级",
    "应收账款": 58000.50
    }

    # 访问客户信息
    print(f"客户:{客户信息['公司名称']}")
    print(f"联系人:{客户信息['联系人']}")
    print(f"联系电话:{客户信息['联系电话']}")

    # 修改应收账款
    客户信息['应收账款'] = 62000.00 # 新增欠款
    print(f"更新后应收账款:{客户信息['应收账款']}元")
  2. 添加删除(动态信息卡片)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # 添加新信息
    客户信息['邮箱'] = 'limanager@company.com'
    客户信息['合作年限'] = 3
    客户信息['是否VIP'] = True

    print(f"添加后:{客户信息}")

    # 删除信息
    del 客户信息['地址'] # 删除地址
    print(f"删除后:{客户信息}")

    # 安全获取(避免报错)
    邮箱 = 客户信息.get('邮箱', '暂无邮箱') # 如果有就用,没有就用默认值
    print(f"邮箱:{邮箱}")
  3. 遍历字典(批量处理信息)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # 遍历所有信息
    print(f"\n📋 客户{客户信息['公司名称']}完整信息:")
    for 键, 值 in 客户信息.items():
    print(f" {键}{值}")

    # 只遍历键
    print(f"\n客户信息字段:")
    forin 客户信息.keys():
    print(f" {键}")

    # 只遍历值
    print(f"\n客户信息内容:")
    forin 客户信息.values():
    print(f" {值}")
财务实战:产品目录管理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# 产品目录管理系统
print("=== 产品目录管理系统 ===")

# 产品字典(每个产品是一个完整的信息卡片)
产品目录 = {
"P001": {
"名称": "ThinkPad X1",
"类别": "笔记本电脑",
"单价": 8999,
"库存": 25,
"供应商": "联想",
"保修期": 24,
"状态": "在售"
},
"P002": {
"名称": "Dell显示器24寸",
"类别": "显示器",
"单价": 1299,
"库存": 45,
"供应商": "戴尔",
"保修期": 12,
"状态": "在售"
},
"P003": {
"名称": "罗技无线鼠标",
"类别": "配件",
"单价": 199,
"库存": 150,
"供应商": "罗技",
"保修期": 6,
"状态": "在售"
}
}

# 显示产品列表
print("📦 产品目录:")
for 产品编号, 产品信息 in 产品目录.items():
print(f"\n{产品编号} - {产品信息['名称']}")
print(f" 类别:{产品信息['类别']}")
print(f" 单价:{产品信息['单价']}元")
print(f" 库存:{产品信息['库存']}件")
print(f" 供应商:{产品信息['供应商']}")

# 查找特定类别的产品
print(f"\n🔍 查找笔记本电脑:")
笔记本列表 = []
for 产品编号, 产品信息 in 产品目录.items():
if 产品信息['类别'] == '笔记本电脑':
笔记本列表.append(产品编号)

print(f"找到{len(笔记本列表)}款笔记本电脑:")
for 编号 in 笔记本列表:
print(f" {产品目录[编号]['名称']} - {产品目录[编号]['单价']}元")

# 计算各类别库存价值
print(f"\n💰 各类别库存价值:")
类别价值 = {}
for 产品编号, 产品信息 in 产品目录.items():
类别 = 产品信息['类别']
价值 = 产品信息['单价'] * 产品信息['库存']

if 类别 not in 类别价值:
类别价值[类别] = 0
类别价值[类别] += 价值

for 类别, 总价值 in 类别价值.items():
print(f" {类别}{总价值:,}元")

# 添加新产品
新产品 = {
"P004": {
"名称": "HP激光打印机",
"类别": "打印机",
"单价": 2499,
"库存": 8,
"供应商": "惠普",
"保修期": 12,
"状态": "在售"
}
}

产品目录.update(新产品)
print(f"\n✅ 添加新产品后,共有{len(产品目录)}款产品")

💰 实战项目:管理个人投资组合

版本1.0:基础版投资组合
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# 个人投资组合管理 - 基础版
print("=== 个人投资组合管理系统 ===")

# 投资组合(用列表存储)
投资列表 = [
{"名称": "贵州茅台", "代码": "600519", "买入价": 1600, "现价": 1750, "数量": 100},
{"名称": "中国平安", "代码": "601318", "买入价": 45, "现价": 52, "数量": 1000},
{"名称": "腾讯控股", "代码": "00700", "买入价": 320, "现价": 380, "数量": 500},
{"名称": "比特币", "代码": "BTC", "买入价": 25000, "现价": 42000, "数量": 0.5},
{"名称": "黄金ETF", "代码": "518880", "买入价": 3.8, "现价": 4.2, "数量": 10000}
]

# 计算投资组合总价值
print("📊 投资组合详情:")
总投入 = 0
总市值 = 0

for i, 投资 in enumerate(投资列表, 1):
投入成本 = 投资["买入价"] * 投资["数量"]
当前市值 = 投资["现价"] * 投资["数量"]
盈亏金额 = 当前市值 - 投入成本
盈亏比例 = 盈亏金额 / 投入成本 * 100

总投入 += 投入成本
总市值 += 当前市值

print(f"\n{i}. {投资['名称']} ({投资['代码']})")
print(f" 买入价:{投资['买入价']}元,现价:{投资['现价']}元")
print(f" 持有数量:{投资['数量']}")
print(f" 投入成本:{投入成本:,.2f}元")
print(f" 当前市值:{当前市值:,.2f}元")
print(f" 盈亏:{盈亏金额:,.2f}元 ({盈亏比例:+.1f}%)")

# 投资组合汇总
总盈亏 = 总市值 - 总投入
总收益率 = 总盈亏 / 总投入 * 100

print(f"\n" + "="*50)
print(f"📈 投资组合汇总:")
print(f"总投入:{总投入:,.2f}元")
print(f"总市值:{总市值:,.2f}元")
print(f"总盈亏:{总盈亏:,.2f}元 ({总收益率:+.1f}%)")

# 盈亏分析
if 总收益率 > 20:
投资评价 = "优秀!超过20%收益"
elif 总收益率 > 10:
投资评价 = "良好!跑赢通胀"
elif 总收益率 > 0:
投资评价 = "小有收获,继续保持"
elif 总收益率 > -10:
投资评价 = "小幅亏损,需要调整"
else:
投资评价 = "亏损较大,建议止损"

print(f"投资评价:{投资评价}")
版本2.0:增强版(分类统计)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# 个人投资组合管理 - 增强版
print("=== 投资组合管理系统(增强版) ===")

# 更详细的投资组合(用字典存储更丰富的信息)
投资组合 = {
"股票": {
"A股": [
{"名称": "贵州茅台", "代码": "600519", "买入价": 1600, "现价": 1750, "数量": 100, "买入日期": "2023-01-15"},
{"名称": "中国平安", "代码": "601318", "买入价": 45, "现价": 52, "数量": 1000, "买入日期": "2023-03-20"}
],
"港股": [
{"名称": "腾讯控股", "代码": "00700", "买入价": 320, "现价": 380, "数量": 500, "买入日期": "2023-02-10"}
]
},
"基金": {
"ETF": [
{"名称": "黄金ETF", "代码": "518880", "买入价": 3.8, "现价": 4.2, "数量": 10000, "买入日期": "2023-04-05"}
]
},
"数字货币": {
"主流币": [
{"名称": "比特币", "代码": "BTC", "买入价": 25000, "现价": 42000, "数量": 0.5, "买入日期": "2023-01-01"}
]
}
}

# 详细分析函数
def 分析投资组合(投资组合):
"""详细分析投资组合的各项指标"""
分析结果 = {
"总资产": 0,
"总投入": 0,
"分类统计": {},
"个券详情": []
}

# 遍历所有投资
for 资产类别, 子分类 in 投资组合.items():
分析结果["分类统计"][资产类别] = {"投入": 0, "市值": 0, "数量": 0}

for 子类名称, 投资列表 in 子分类.items():
for 投资 in 投资列表:
投入成本 = 投资["买入价"] * 投资["数量"]
当前市值 = 投资["现价"] * 投资["数量"]
盈亏 = 当前市值 - 投入成本

# 更新总计
分析结果["总投入"] += 投入成本
分析结果["总资产"] += 当前市值

# 更新分类统计
分析结果["分类统计"][资产类别]["投入"] += 投入成本
分析结果["分类统计"][资产类别]["市值"] += 当前市值
分析结果["分类统计"][资产类别]["数量"] += 1

# 记录个券详情
分析结果["个券详情"].append({
"类别": 资产类别,
"子类": 子类名称,
"名称": 投资["名称"],
"投入": 投入成本,
"市值": 当前市值,
"盈亏": 盈亏,
"收益率": 盈亏 / 投入成本 * 100 if 投入成本 > 0 else 0
})

return 分析结果

# 使用分析函数
分析结果 = 分析投资组合(投资组合)

# 输出详细报告
print("📊 投资组合详细分析:")
print(f"\n总资产:{分析结果['总资产']:,.2f}元")
print(f"总投入:{分析结果['总投入']:,.2f}元")
print(f"总盈亏:{分析结果['总资产'] - 分析结果['总投入']:,.2f}元")
print(f"总收益率:{(分析结果['总资产'] - 分析结果['总投入']) / 分析结果['总投入'] * 100:+.1f}%")

print(f"\n📈 分类资产配置:")
for 类别, 统计 in 分析结果["分类统计"].items():
占比 = 统计["市值"] / 分析结果["总资产"] * 100
类别收益率 = (统计["市值"] - 统计["投入"]) / 统计["投入"] * 100 if 统计["投入"] > 0 else 0
print(f"\n{类别}:")
print(f" 市值:{统计['市值']:,.2f}元(占比{占比:.1f}%)")
print(f" 收益率:{类别收益率:+.1f}%")

# 找出表现最好和最差的投资
个券详情 = 分析结果["个券详情"]
最佳投资 = max(个券详情, key=lambda x: x["收益率"])
最差投资 = min(个券详情, key=lambda x: x["收益率"])

print(f"\n🏆 最佳投资:{最佳投资['名称']}{最佳投资['收益率']:+.1f}%)")
print(f"📉 最差投资:{最差投资['名称']}{最差投资['收益率']:+.1f}%)")

# 投资建议
print(f"\n💡 投资建议:")
股票占比 = 分析结果["分类统计"]["股票"]["市值"] / 分析结果["总资产"] * 100
if 股票占比 > 70:
print("⚠️ 股票占比过高,建议适当分散风险")
elif 股票占比 < 30:
print("💡 股票占比较低,可考虑增加权益类投资")
else:
print("✅ 股票配置比例合理")

if len(个券详情) < 10:
print("💡 投资集中度较高,建议进一步分散")
else:
print("✅ 投资分散度良好")
版本3.0:专业版(智能分析)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
# 个人投资组合管理 - 专业版
print("=== 投资组合管理(专业版) ===")

import datetime
import random

# 模拟更真实的历史数据
def 生成历史数据(初始价值, 月数, 年化收益率=0.08, 波动率=0.15):
"""生成模拟的投资历史数据"""
历史数据 = []
当前价值 = 初始价值
月收益率 = 年化收益率 / 12
月波动率 = 波动率 / math.sqrt(12)

起始日期 = datetime.date(2023, 1, 1)

for i in range(月数):
# 生成随机收益率(正态分布)
随机收益率 = random.normalvariate(月收益率, 月波动率)
当前价值 *= (1 + 随机收益率)

当前日期 = 起始日期 + datetime.timedelta(days=i*30)
历史数据.append({
"日期": 当前日期.strftime("%Y-%m-%d"),
"价值": round(当前价值, 2)
})

return 历史数据

# 投资组合(包含历史数据)
专业投资组合 = {
"P001": {
"基础信息": {
"名称": "贵州茅台",
"代码": "600519",
"类型": "股票",
"市场": "A股"
},
"交易记录": [
{"日期": "2023-01-15", "操作": "买入", "价格": 1600, "数量": 100},
{"日期": "2023-06-20", "操作": "分红", "价格": 0, "数量": 0, "金额": 1450}
],
"当前价格": 1750,
"历史数据": 生成历史数据(160000, 12, 0.12, 0.25)
},
"P002": {
"基础信息": {
"名称": "中国平安",
"代码": "601318",
"类型": "股票",
"市场": "A股"
},
"交易记录": [
{"日期": "2023-03-20", "操作": "买入", "价格": 45, "数量": 1000}
],
"当前价格": 52,
"历史数据": 生成历史数据(45000, 10, 0.08, 0.30)
},
"P003": {
"基础信息": {
"名称": "黄金ETF",
"代码": "518880",
"类型": "基金",
"市场": "ETF"
},
"交易记录": [
{"日期": "2023-04-05", "操作": "买入", "价格": 3.8, "数量": 10000}
],
"当前价格": 4.2,
"历史数据": 生成历史数据(38000, 9, 0.06, 0.15)
}
}

# 高级分析函数
def 高级组合分析(投资组合):
"""进行高级的投资组合分析"""

分析结果 = {
"持仓分析": {},
"收益分析": {},
"风险分析": {},
"历史表现": {}
}

总投入 = 0
总现值 = 0
所有持仓 = []

# 分析每个持仓
for 代码, 持仓信息 in 投资组合.items():
基础信息 = 持仓信息["基础信息"]
交易记录 = 持仓信息["交易记录"]
当前价格 = 持仓信息["当前价格"]
历史数据 = 持仓信息["历史数据"]

# 计算投入成本
投入成本 = 0
总数量 = 0
for 交易 in 交易记录:
if 交易["操作"] == "买入":
投入成本 += 交易["价格"] * 交易["数量"]
总数量 += 交易["数量"]

# 当前价值
当前价值 = 当前价格 * 总数量

# 历史表现分析
if len(历史数据) >= 2:
初始价值 = 历史数据[0]["价值"]
最终价值 = 历史数据[-1]["价值"]
期间收益率 = (最终价值 - 初始价值) / 初始价值

分析结果["历史表现"][代码] = {
"持有期收益": 期间收益率,
"初始价值": 初始价值,
"最终价值": 最终价值,
"数据点数": len(历史数据)
}

持仓详情 = {
"代码": 代码,
"名称": 基础信息["名称"],
"类型": 基础信息["类型"],
"投入成本": 投入成本,
"当前价值": 当前价值,
"持仓数量": 总数量,
"当前价格": 当前价格,
"盈亏金额": 当前价值 - 投入成本,
"收益率": (当前价值 - 投入成本) / 投入成本 if 投入成本 > 0 else 0
}

所有持仓.append(持仓详情)
总投入 += 投入成本
总现值 += 当前价值

# 组合层面分析
分析结果["持仓分析"] = {
"总投入": 总投入,
"总现值": 总现值,
"总盈亏": 总现值 - 总投入,
"总收益率": (总现值 - 总投入) / 总投入 if 总投入 > 0 else 0,
"持仓明细": 所有持仓
}

# 资产配置分析
类型统计 = {}
市场统计 = {}

for 持仓 in 所有持仓:
资产类型 = 持仓["类型"]
# 按类型统计
if 资产类型 not in 类型统计:
类型统计[资产类型] = {"市值": 0, "占比": 0}
类型统计[资产类型]["市值"] += 持仓["当前价值"]

# 假设有市场信息
市场 = "A股" # 简化处理
if 市场 not in 市场统计:
市场统计[市场] = {"市值": 0, "占比": 0}
市场统计[市场]["市值"] += 持仓["当前价值"]

# 计算占比
for 类型 in 类型统计:
类型统计[类型]["占比"] = 类型统计[类型]["市值"] / 总现值 * 100

for 市场 in 市场统计:
市场统计[市场]["占比"] = 市场统计[市场]["市值"] / 总现值 * 100

分析结果["收益分析"] = {
"资产类型分布": 类型统计,
"市场分布": 市场统计
}

return 分析结果

# 使用高级分析
高级分析结果 = 高级组合分析(专业投资组合)

# 输出专业报告
print("📊 专业投资组合分析报告:")
print(f"\n💰 组合概览:")
print(f"总投入:{高级分析结果['持仓分析']['总投入']:,.2f}元")
print(f"总现值:{高级分析结果['持仓分析']['总现值']:,.2f}元")
print(f"总盈亏:{高级分析结果['持仓分析']['总盈亏']:,.2f}元")
print(f"总收益率:{高级分析结果['持仓分析']['总收益率']:.2%}")

print(f"\n📈 资产配置:")
for 资产类型, 统计 in 高级分析结果["收益分析"]["资产类型分布"].items():
print(f"{资产类型}{统计['市值']:,.2f}元({统计['占比']:.1f}%)")

print(f"\n📋 持仓明细:")
for 持仓 in 高级分析结果["持仓分析"]["持仓明细"]:
print(f"{持仓['名称']} ({持仓['代码']}):")
print(f" 投入:{持仓['投入成本']:,.2f}元,现值:{持仓['当前价值']:,.2f}元")
print(f" 收益率:{持仓['收益率']:.2%},盈亏:{持仓['盈亏金额']:,.2f}元")

# 历史表现对比
print(f"\n📊 历史表现对比:")
for 代码, 表现 in 高级分析结果["历史表现"].items():
持仓信息 = 专业投资组合[代码]
print(f"{持仓信息['基础信息']['名称']}:")
print(f" 持有期收益:{表现['持有期收益']:.2%}")
print(f" 价值变化:{表现['初始价值']:,.0f}元 → {表现['最终价值']:,.0f}元")

# 智能建议
print(f"\n💡 智能投资建议:")

# 1. 集中度分析
持仓数量 = len(高级分析结果["持仓分析"]["持仓明细"])
if 持仓数量 < 5:
print("⚠️ 持仓过于集中,建议分散投资")
elif 持仓数量 > 20:
print("💡 持仓过于分散,可考虑集中优质资产")
else:
print("✅ 持仓分散度适中")

# 2. 收益率分析
平均收益率 = sum(持仓["收益率"] for 持仓 in 高级分析结果["持仓分析"]["持仓明细"]) / 持仓数量
if 平均收益率 > 0.15:
print("🎉 组合表现优秀,收益超过15%")
elif 平均收益率 > 0:
print("👍 组合获得正收益,表现良好")
else:
print("⚠️ 组合出现亏损,需要关注")

# 3. 个股建议
最佳持仓 = max(高级分析结果["持仓分析"]["持仓明细"], key=lambda x: x["收益率"])
最差持仓 = min(高级分析结果["持仓分析"]["持仓明细"], key=lambda x: x["收益率"])

print(f"\n🏆 建议继续持有:{最佳持仓['名称']}(收益率{最佳持仓['收益率']:.2%})")
if 最差持仓["收益率"] < -0.1: # 亏损超过10%
print(f"⚠️ 建议关注:{最差持仓['名称']}(收益率{最差持仓['收益率']:.2%})")
print(" 可考虑止损或加仓摊薄成本")

🏃‍♀️ 进阶小挑战

挑战1:客户管理系统
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# 客户管理系统
print("=== 客户管理系统 ===")

# 客户数据库(用字典存储)
客户数据库 = {
"C001": {
"基本信息": {
"公司名称": "科技创新有限公司",
"联系人": "李总",
"职位": "总经理",
"电话": "13800138000",
"邮箱": "lizong@techcompany.com",
"地址": "北京市海淀区中关村大街1号"
},
"财务信息": {
"信用等级": "A",
"授信额度": 500000,
"应收账款": 125000,
"合作年限": 3,
"历史订单数": 25,
"总交易额": 850000
},
"交易记录": [
{"日期": "2024-01-15", "订单号": "SO2024001", "金额": 25000, "状态": "已收款"},
{"日期": "2024-02-20", "订单号": "SO2024002", "金额": 35000, "状态": "已收款"},
{"日期": "2024-03-10", "订单号": "SO2024003", "金额": 45000, "状态": "未收款"},
{"日期": "2024-03-25", "订单号": "SO2024004", "金额": 20000, "状态": "未收款"}
]
},
"C002": {
"基本信息": {
"公司名称": "贸易发展有限公司",
"联系人": "王经理",
"职位": "采购经理",
"电话": "13900139000",
"邮箱": "wang@tradecompany.com",
"地址": "上海市浦东新区陆家嘴路2号"
},
"财务信息": {
"信用等级": "B",
"授信额度": 300000,
"应收账款": 85000,
"合作年限": 2,
"历史订单数": 15,
"总交易额": 420000
},
"交易记录": [
{"日期": "2024-01-20", "订单号": "SO2024005", "金额": 30000, "状态": "已收款"},
{"日期": "2024-02-15", "订单号": "SO2024006", "金额": 25000, "状态": "已收款"},
{"日期": "2024-03-05", "订单号": "SO2024007", "金额": 30000, "状态": "未收款"}
]
}
}

# 客户分析函数
def 分析客户(客户编号, 客户数据):
"""分析单个客户的综合情况"""
基本信息 = 客户数据["基本信息"]
财务信息 = 客户数据["财务信息"]
交易记录 = 客户数据["交易记录"]

# 计算相关指标
平均订单金额 = sum(交易["金额"] for 交易 in 交易记录) / len(交易记录)
未收款金额 = sum(交易["金额"] for 交易 in 交易记录 if 交易["状态"] == "未收款")
最近交易日期 = max(交易["日期"] for 交易 in 交易记录)

return {
"客户编号": 客户编号,
"公司名称": 基本信息["公司名称"],
"应收账款": 财务信息["应收账款"],
"未收款金额": 未收款金额,
"平均订单金额": 平均订单金额,
"最近交易": 最近交易日期,
"信用等级": 财务信息["信用等级"]
}

# 分析所有客户
print("📊 客户分析报告:")
for 客户编号, 客户数据 in 客户数据库.items():
分析 = 分析客户(客户编号, 客户数据)
print(f"\n{分析['公司名称']} ({客户编号}):")
print(f" 应收账款:{分析['应收账款']:,}元")
print(f" 未收款金额:{分析['未收款金额']:,}元")
print(f" 平均订单金额:{分析['平均订单金额']:.0f}元")
print(f" 最近交易:{分析['最近交易']}")
print(f" 信用等级:{分析['信用等级']}")

# 应收账款分析
总应收账款 = sum(客户["财务信息"]["应收账款"] for 客户 in 客户数据库.values())
print(f"\n💰 应收账款总计:{总应收账款:,}元")

# 信用风险分析
高风险客户 = []
for 客户编号, 客户数据 in 客户数据库.items():
if 客户数据["财务信息"]["信用等级"] == "C":
高风险客户.append(客户编号)

if 高风险客户:
print(f"\n⚠️ 高风险客户:{len(高风险客户)}个")
for 客户编号 in 高风险客户:
print(f" - {客户数据库[客户编号]['基本信息']['公司名称']}")
else:
print("\n✅ 暂无高风险客户")

# 客户价值排名
客户价值 = []
for 客户编号, 客户数据 in 客户数据库.items():
价值 = 客户数据["财务信息"]["总交易额"]
客户价值.append((客户编号, 价值))

客户价值.sort(key=lambda x: x[1], reverse=True)

print(f"\n🏆 客户价值排名:")
for i, (客户编号, 价值) in enumerate(客户价值, 1):
公司名称 = 客户数据库[客户编号]["基本信息"]["公司名称"]
print(f"{i}. {公司名称} - {价值:,}元")
挑战2:员工绩效评估系统
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# 员工绩效评估系统
print("=== 员工绩效评估系统 ===")

# 员工数据库
员工数据库 = {
"E001": {
"基本信息": {
"姓名": "张三",
"部门": "销售部",
"职位": "销售经理",
"入职日期": "2020-03-15",
"级别": "P6"
},
"绩效数据": {
"2023Q1": {"目标完成率": 115, "客户满意度": 92, "团队协作": 88, "创新能力": 85},
"2023Q2": {"目标完成率": 108, "客户满意度": 89, "团队协作": 90, "创新能力": 87},
"2023Q3": {"目标完成率": 125, "客户满意度": 95, "团队协作": 92, "创新能力": 90},
"2023Q4": {"目标完成率": 118, "客户满意度": 91, "团队协作": 89, "创新能力": 88}
},
"项目经历": [
{"项目名称": "大客户拓展项目", "角色": "项目负责人", "贡献度": 90, "完成时间": "2023-06"},
{"项目名称": "新产品推广", "角色": "核心成员", "贡献度": 85, "完成时间": "2023-09"}
]
},
"E002": {
"基本信息": {
"姓名": "李四",
"部门": "技术部",
"职位": "高级工程师",
"入职日期": "2019-07-20",
"级别": "P7"
},
"绩效数据": {
"2023Q1": {"目标完成率": 95, "客户满意度": 88, "团队协作": 92, "创新能力": 95},
"2023Q2": {"目标完成率": 102, "客户满意度": 90, "团队协作": 94, "创新能力": 98},
"2023Q3": {"目标完成率": 98, "客户满意度": 87, "团队协作": 90, "创新能力": 92},
"2023Q4": {"目标完成率": 105, "客户满意度": 91, "团队协作": 93, "创新能力": 96}
},
"项目经历": [
{"项目名称": "系统架构升级", "角色": "技术负责人", "贡献度": 95, "完成时间": "2023-05"},
{"项目名称": "AI算法优化", "角色": "核心开发者", "贡献度": 88, "完成时间": "2023-11"}
]
}
}

# 绩效分析函数
def 计算绩效得分(绩效数据):
"""计算综合绩效得分"""
权重 = {
"目标完成率": 0.4,
"客户满意度": 0.25,
"团队协作": 0.2,
"创新能力": 0.15
}

综合得分 = 0
for 指标, 得分 in 绩效数据.items():
综合得分 += 得分 * 权重[指标]

return 综合得分

def 绩效等级评定(综合得分):
"""根据得分评定绩效等级"""
if 综合得分 >= 110:
return "优秀", "A"
elif 综合得分 >= 100:
return "良好", "B"
elif 综合得分 >= 90:
return "合格", "C"
else:
return "待改进", "D"

def 分析员工绩效(员工编号, 员工数据):
"""全面分析员工绩效"""
基本信息 = 员工数据["基本信息"]
绩效数据 = 员工数据["绩效数据"]
项目经历 = 员工数据["项目经历"]

# 计算各季度得分
季度得分 = {}
for 季度, 数据 in 绩效数据.items():
季度得分[季度] = 计算绩效得分(数据)

# 计算年度平均分
年度平均分 = sum(季度得分.values()) / len(季度得分)
绩效等级, 等级字母 = 绩效等级评定(年度平均分)

# 项目表现分析
平均项目贡献 = sum(项目["贡献度"] for 项目 in 项目经历) / len(项目经历)

return {
"员工编号": 员工编号,
"姓名": 基本信息["姓名"],
"部门": 基本信息["部门"],
"年度平均分": 年度平均分,
"绩效等级": 绩效等级,
"等级字母": 等级字母,
"季度得分": 季度得分,
"项目经历数": len(项目经历),
"平均项目贡献": 平均项目贡献
}

# 分析所有员工
print("📊 员工绩效评估报告:")

绩效结果列表 = []
for 员工编号, 员工数据 in 员工数据库.items():
绩效结果 = 分析员工绩效(员工编号, 员工数据)
绩效结果列表.append(绩效结果)

print(f"\n{绩效结果['姓名']} ({绩效结果['员工编号']}):")
print(f" 部门:{绩效结果['部门']}")
print(f" 年度绩效得分:{绩效结果['年度平均分']:.1f}")
print(f" 绩效等级:{绩效结果['绩效等级']} ({绩效结果['等级字母']})")
print(f" 项目经历:{绩效结果['项目经历数']}个")
print(f" 平均项目贡献:{绩效结果['平均项目贡献']:.0f}%")

# 季度趋势
季度得分 = 绩效结果["季度得分"]
print(f" 季度表现趋势:", end="")
for 季度, 得分 in 季度得分.items():
print(f"{季度}:{得分:.0f}分", end=" ")
print()

# 部门绩效对比
部门统计 = {}
for 绩效结果 in 绩效结果列表:
部门 = 绩效结果["部门"]
if 部门 not in 部门统计:
部门统计[部门] = {"人数": 0, "平均分": 0, "优秀人数": 0}

部门统计[部门]["人数"] += 1
部门统计[部门]["平均分"] += 绩效结果["年度平均分"]

if 绩效结果["等级字母"] == "A":
部门统计[部门]["优秀人数"] += 1

print(f"\n📈 部门绩效对比:")
for 部门, 统计 in 部门统计.items():
平均分 = 统计["平均分"] / 统计["人数"]
优秀率 = 统计["优秀人数"] / 统计["人数"] * 100
print(f"{部门}:平均{平均分:.1f}分,优秀率{优秀率:.1f}% ({统计['优秀人数']}/{统计['人数']})")

# 整体分析
总平均分 = sum(结果["年度平均分"] for 结果 in 绩效结果列表) / len(绩效结果列表)
优秀员工数 = sum(1 for 结果 in 绩效结果列表 if 结果["等级字母"] == "A")

print(f"\n📋 整体绩效分析:")
print(f"参评员工总数:{len(绩效结果列表)}人")
print(f"平均绩效得分:{总平均分:.1f}分")
print(f"优秀员工比例:{优秀员工数/len(绩效结果列表)*100:.1f}% ({优秀员工数}人)")

# 改进建议
print(f"\n💡 改进建议:")
低分员工 = [结果 for 结果 in 绩效结果列表 if 结果["年度平均分"] < 90]
if 低分员工:
print(f"需要关注的员工({len(低分员工)}人):")
for 员工 in 低分员工:
print(f" - {员工['姓名']}{员工['部门']}):{员工['年度平均分']:.1f}分")
print("建议:提供针对性培训和辅导")
else:
print("✅ 所有员工绩效达标!")

💭 今日思考

通过今天的学习,我们发现:

  • 列表就像Excel的一列数据,有序且灵活
  • 字典就像Excel的一行完整记录,信息丰富且直观
  • 列表和字典配合使用,能构建复杂的数据结构

📝 课后小结

  • ✅ 掌握了列表的创建和基本操作
  • ✅ 学会了字典的使用方法
  • ✅ 理解了列表和字典的配合使用
  • ✅ 制作了专业版的投资组合管理系统

🎯 下节预告

下节我们将学习文件操作:让Python读写Excel,把今天做的投资组合保存到Excel文件,还能读取现有的Excel表格数据,实现Python和Excel的无缝对接!

准备好让Python操作你的Excel文件了吗?


💡 小贴士

  • 列表适合存储同类型的有序数据
  • 字典适合存储一个对象的多个属性
  • 嵌套使用列表和字典可以构建复杂的数据结构
  • 多练习用字典存储信息,比多个列表更直观

🤖 Powered by Kimi K2 0905 💻 内容经葵葵🌻审核与修改