将字典中value值为列表中的下标与t1的值做替换

需求描述1

有一个t1列表,列表中存放着类型为str的数字;另有一个字典dict_1,key为0、1、2的数字,value为列表,列表中存放的数字是t1中元素的下标。需求是将字典中列表中的下标与t1的值做替换。

举例:

t1 = ['120', '193', '354', '1448', '1583', '1661', '1671', '2162', '2281', '3817']
dic_t = {0: [0, 2, 6, 9], 1: [1, 7, 8], 2: [3, 4, 5]}
说明:比如dic_t中的[1, 7 ,8],其中1代表的是t1中下标为1的元素"193",7代表的是t1中下标为7的元素"2162"
#最终结果
dic_t = {0:['120', '354', '1671', '3817'],
         1: ['193', '2162', '2281'],
         2: ['1448', '1583', '1661']}

实现代码

t1 = ['120', '193', '354', '1448', '1583', '1661', '1671', '2162', '2281', '3817']
dic_t = {0: [0, 2, 6, 9], 1: [1, 7, 8], 2: [3, 4, 5]}
dic_t_new = {}
for key,value in dic_t.items():
    y = []
    for v in value:
        y.append(t1[v])
    dic_t_new[key] = y
print(dic_t_new)

需求描述2

将xlsx文件中的表单根据其唯一索引(红色框部分),重新做对应,并保存为json文件。

举例:有主表1和主表2两个表单,由于隐私问题,已脱敏表单中的数据。

说明:将两个表单根据唯一索引,对其余的属性做一一对应,比如唯一索引为"f6lh7bikyewvu",在两个表单中总共有4条数据,将唯一索引作为列表的key,其余的属性作为值,例如"信息来源" = "维基百科",以此类推。具体格式如下:
(注意两点,一是如果在遍历时发现"唯一索引"不在ID的键里面,那么就新增作为键,二是在新增属性的列表时,不要出现重复的值)
ID = 
{
    "f6lh7bikyewvu" =
        {
            "信息来源" = "维基百科",
            "来源详情" = "xxxx",
            ...
            "录入员ID" = [1081,1053],
            "文件大小" = [197,219,19198],
        }
    "xxxxxx" = 
        {}
}

代码实现

import pandas as pd
import json
from collections import defaultdict
import numpy as np
ID = defaultdict(dict)
def f(sheet_file):
    all_columns = set(sheet_file.columns)
    all_columns.remove('唯一索引')
    #col = df.columns
    for i in range(len(sheet_file)):
        if sheet_file['唯一索引'][i] not in ID.keys():   #如果"唯一索引"不在inner_ID的键里面,那么就新增作为键
            ID[sheet_file['唯一索引'][i]]=defaultdict(list)
        for c in all_columns:   #对除了"唯一索引"外的所有列进行遍历
            if str(sheet_file[c][i])!='nan':   #判断值是否为空,不为空,append
                if sheet_file[c][i] not in ID[sheet_file['唯一索引'][i]][c]:  #在将值填入列表之前,判断列表中是否已存在,不存在的时候再添加
                    ID[sheet_file['唯一索引'][i]][c].append(sheet_file[c][i])  
file_path = 'test.xlsx'   # r对路径进行转义,windows需要
major_table1_data = pd.read_excel(file_path,header=0,sheet_name="主表1")
f(major_table1_data)

major_table2_data = pd.read_excel(file_path,header=0,sheet_name="主表2")
f(major_table2_data)

#最后打印ID 
print(ID)
#保存为json
def default_dump(obj):
    """Convert numpy classes to JSON serializable objects."""
    if isinstance(obj, (np.integer, np.floating, np.bool_)):
        return obj.item()
    elif isinstance(obj, np.ndarray):
        return obj.tolist()
    else:
        return obj
    
dic = json.dumps(inner_ID, indent=4, ensure_ascii=False, sort_keys=False, skipkeys=False,separators=(",", ":"),default=default_dump)
# print(type(dic))
with open("all_data.json", "a", encoding="utf-8") as f:
    f.write(dic)

完整表格数据可在这里下载。https://download.csdn.net/download/Q_999999/87606113

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值