文件操作之文件中的内容转换为列表里面的字典

# 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)
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值