文件操作之文件中的内容转换为列表里面的字典
程序员文章站
2024-03-22 22:09:04
...
# 3.文件a.txt内容:每一行内容分别为商品名字,价钱,个数。 (20分钟)
#
# apple 10 3
# tesla 100000 1
# mac 3000 2
# lenovo 30000 3
# chicken 10 3
# 通过代码,将其构建成这种数据类型:[{'name':'apple','price':10,'amount':3},{'name':'tesla','price':1000000,'amount':1}......] 并计算出总价钱。
思路:
1:将所有的文本拿出来,然后进行提取键和值
2:先拿键,在拿值
3:开辟新的空间的时候可以用深浅拷贝
4:也可以通过for循环跟While搭配来做题
5:核心思想是要抓住键值是一一对应的
总结:
做题讲究死去活来
做题前先把题写死
然后再往灵活里面写
做题也讲究拆分
先把题拆成一块一块的
然后再经过类比
把他们加起来
当拿到键跟值无法组成字典的时候
将字典的键放到一个列表里面
循环键的字典,然后拿到值得列表
通过一一对应,把他们对接起来
方法二
with open("home03-1.txt",mode="r",encoding="utf-8")as f:
lst = f.readlines() #将值全部放到一个列表中
lst1 = []
for i in lst:
lst1.append(i.split())
print(lst1)
lst2 = []
for i in range(len(lst1)):
print(i)
dic = {}
if i == 5:
break
for x in range(len(lst1[i])):
dic[lst1[0][x]] = lst1[i+1][x]
# print(lst1[0][x])
# print(lst1[i+1][x])
lst2.append(dic)
print(lst2)
方法二精简:
****************************************************************************
with open("home03-1.txt",mode="r",encoding="utf-8")as f:
lst = f.readlines() #将值全部放到一个列表中
lst1 = []
lst2 = []
for i in lst:
lst1.append(i.strip().split())
for i in range(len(lst1)):
dic = {}
if i == 5:
break
for x in range(len(lst1[i])):
dic[lst1[0][x]] = lst1[i+1][x]
lst2.append(dic)
print(lst2)
# 次方法乃是把所有的内容放到一个列表里面,然后根据索引进行查找赋值,跟分开切割有异曲同工之妙
# for i in lst:
# # lst1.append(i.split())
# len(i.split())
# for x in range(len(i.split())):
# print(x)
# dic = {}
# if x == 5:
# break
# for j in range(len(x)):
# dic[lst1[0][j]] = lst1[x + 1][j]
# lst2.append(dic)
# print(lst2)
# 次方法乃是把所有的内容放到一个列表里面,然后根据索引进行查找赋值,跟分开切割有异曲同工之妙
#方法三:
# dict1=dict()
# list2=list()
# for each_key in list1[0].split():
# dict1.setdefault(each_key,None)
# print("获取到的键的值:",dict1)
# for each in list1[1:]: #开始循环值
# list3=each.split() #将值变为列表
# print("值变为列表list3:",list3)
# count=0
# for each_key in dict1.keys():
# print("键的值为:",each_key)
# if list3[count].isdigit(): #判断是不是数字,如果是数字,就将他转为Int在添加进去 ->>因为从文件中拿到的都是字符串
# dict1[each_key]=int(list3[count])
# print("有没有值?:",dict1[each_key])
# else:
# dict1[each_key]=list3[count]
# print("没有值得时候",dict1[each_key])
# count+=1
# print(dict1)
# list2.append(dict1.copy())#列表中所有dict1空间一致,用拷贝改变位置
# print(dict1)
# print(list2)
方法四:
lst = list()
f = open("home03-1.txt", mode="r", encoding="utf-8")
title = f.readline().strip().split() #读取键 直接去除两边的空格然后把他变为列表 变为列表就好找值了
print(title)
for el in f:
dic = dict() #每次添加完将他变为新字典,防止公用同一个内存空间
mes = el.strip().split() #将剩下的行变为列表
print(mes)
for i in range(len(title)): #既然是一一对应,那么这个时候为什么用标题的长度:用标题的长度是因为值是在一直变化的,每次都需要计算,理论上来说节省了运行速度
dic[title[i]] = mes[i] #键跟值一一对应
lst.append(dic) # 添加字典到列表中
print(lst)
方法五:
key = []
for c in con:
if c == '':
continue
key.append(c)
for i in f:
if i == '序号 部门 人数 平均年龄 备注\n':
continue
print(i)
lis = i.strip().split(' ')
n = 0
dic = {}
for li in lis:
if li == '':
continue
print(li)
dic[key[n]] = li
n +=1
lis1.append(dic)
print(lis1)
方法六:
li = []
with open('home03-1.txt', encoding='utf-8', mode='r') as f1:
lst= f1.readline().strip().split() #读取一行并把他们转为列表:取了键
print(lst)
for i in f1: #剩下的内容,也就是字典的值
print(i)
lst2 = i.strip().split()
print(lst2)
dic = dict(zip(lst, lst2))
li.append(dic)
print(li)
上一篇: js显示json里面的内容