欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 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)