"""5f 课后练习答案：组合数据类型与真题数据结构。"""

import pandas as pd


print("=" * 72)
print("第一部分：列表创建、访问与收集")

columns = ["年度", "季度", "网店名称", "销量", "退单量", "售价"]
first_column = columns[0]
last_column = columns[-1]
business_columns = columns[2:5]
print(first_column, last_column, business_columns)

page_one = [{"商品": "双肩包", "销量": 12}]
page_two = [{"商品": "旅行箱", "销量": 8}]
all_records = []
all_records.extend(page_one)
all_records.extend(page_two)
print("记录数量：", len(all_records), all_records)

dataframe_list = []
df_page_one = pd.DataFrame(page_one)
df_page_two = pd.DataFrame(page_two)
dataframe_list.append(df_page_one)
dataframe_list.append(df_page_two)
combined_pages = pd.concat(dataframe_list, ignore_index=True)
print(combined_pages)


print("\n第二部分：元组与集合")

group_key = (2024, "华东")
year, region = group_key
print(year, region)

raw_channels = ["直播", "搜索", "直播", "短视频", "搜索"]
unique_channels = set(raw_channels)
has_live = "直播" in unique_channels
print(unique_channels, has_live)


print("\n第三部分：字典访问与修改")

product = {"商品名称": "旅行箱", "销量": 125, "售价": 299.0}
sales = product["销量"]
returns = product.get("退单量", 0)
print("实际销量：", sales - returns)

goods_req = {
    "pageNum": 5,
    "pageSize": 1000,
    "tableName": "ms",
    "clname": "网店名称",
    "clvalue": "旧店铺",
}
goods_req["clvalue"] = "名仕旗舰店"
goods_req["pageNum"] = 1
print(goods_req)


print("\n第四部分：嵌套 JSON")

response_data = {
    "code": 200,
    "data": {
        "list": [
            {"商品名称": "双肩包", "销量": "125", "退单量": "8", "售价": "199.0"},
            {"商品名称": "旅行箱", "销量": "80", "退单量": "5", "售价": "399.0"},
        ],
        "hasNextPage": False,
    },
}
records = response_data["data"]["list"]
has_next_page = response_data["data"]["hasNextPage"]
print("商品数：", len(records), "是否还有下一页：", has_next_page)


print("\n第五部分：字典规则与 DataFrame 构造")

aggregation_rules = {
    "实际销量": "sum",
    "实际销售额": "sum",
    "售价": "mean",
}
for column, function_name in aggregation_rules.items():
    print(column, "->", function_name)

target_rows = {
    "项目": ["期初现金的现金流量", "变动金额求和"],
    "金额": [8.0, 4.0],
}
result_table = pd.DataFrame(target_rows)
print(result_table)


print("\n第六部分：名仕真题微案例")

shop_data = [
    {"网店名称": "名仕旗舰店"},
    {"网店名称": "名仕专营店"},
]
mock_pages = {
    "名仕旗舰店": [
        [{"网店名称": "名仕旗舰店", "销量": 125, "退单量": 8, "售价": 199.0}],
        [{"网店名称": "名仕旗舰店", "销量": 60, "退单量": 3, "售价": 259.0}],
    ],
    "名仕专营店": [
        [{"网店名称": "名仕专营店", "销量": 80, "退单量": 5, "售价": 299.0}],
    ],
}


def collect_shop_pages(shops, pages_by_shop):
    """模拟按店铺收集分页 JSON，并合并为 DataFrame。"""
    dataframe_list = []
    goods_req = {"pageNum": 1, "clvalue": ""}

    for shop in shops:
        shop_name = shop["网店名称"]
        goods_req["clvalue"] = shop_name
        goods_req["pageNum"] = 1

        for page_records in pages_by_shop[shop_name]:
            dataframe_list.append(pd.DataFrame(page_records))
            goods_req["pageNum"] += 1

    if not dataframe_list:
        return pd.DataFrame()
    return pd.concat(dataframe_list, ignore_index=True)


collected = collect_shop_pages(shop_data, mock_pages)
print(collected)


print("\n第七部分：自检答案")

# append(x) 把 x 作为一个整体追加；extend(iterable) 把其中元素逐个追加。
# 列名清单需要稳定顺序并允许明确控制输出位置，而集合无序。
# 第一件商品名称的访问路径：
# response_data["data"]["list"][0]["商品名称"]
