需求描述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