繁体   English   中英

如何使用来自文本文件的输入制作字典列表

[英]how to make list of dictionary with an input from text file

所以我想用这样的文本文件输入创建一个字典列表

Aradea 500 125 100 0 0 Safwan 300 50 150 0 0 Fatima 250 75 75 0 0

所需的 output 来自 python

[{'name': 'Aradea', 'price': '500', 'total': 225}
{'name': 'Safwan', 'price': '300', 'total': 200}
{'name': 'Fatima', 'price': '250', 'total': 150}]

所以总数是索引[2]+[3]+[4]+[5]的加法

但我有一个 output。 它像我想要的那样列出了 3 个列表而不是 1 个列表

[{'nama': 'Aradea', 'price': '500', 'total': 225}]
[{'nama': 'Safwan', 'price': '300', 'total': 200}]
[{'nama': 'Fatima', 'price': '250', 'total': 150}]

我的代码是这样的

def baca_data(filename):
    file = open(filename,"r")
    teks = file.readlines()
    for line in teks:
        line = line.split() # indeks[0] name, indeks[1] price, next index is addiction from index[2] till index[5]
        tabungan = []
        d = {}
      
        isi = [[line[0], line[1], int(line[2]) + int(line[3]) + int(line[4]) + int(line[5])]]
        format = ["name","price","total total"]
        for item in isi:
            for key, value in zip(format,item):
                d[key] = value
        tabungan.append(d)
    
        print(tabungan)

你们能帮我解决它吗#pytho

这是因为,列表是在循环中创建的,因此每次迭代都会重新创建它。 因此,在循环外定义列表和 append 字典,并在循环执行后打印列表,如下所示......

def baca_data(filename):
    file = open(filename,"r")
    teks = file.readlines()
    tabungan = []
    for line in teks:
        line = line.split() # indeks[0] name, indeks[1] price, next index is addiction from index[2] till index[5]
        d = {}
      
        isi = [[line[0], line[1], int(line[2]) + int(line[3]) + int(line[4]) + int(line[5])]]
        format = ["name","price","total total"]
        for item in isi:
            for key, value in zip(format,item):
                d[key] = value
        tabungan.append(d)
    
    print(tabungan)

您的问题是您每次迭代都创建一个新列表。 要解决此问题,您需要将列表声明移到for循环之外,并将 append 从那里移到它。

def baca_data(filename):
    file = open(filename,"r")
    teks = file.readlines()
    tabungan = [] #move to here
    for line in teks:
        line = line.split() # indeks[0] name, indeks[1] price, next index is addiction from index[2] till index[5]
        # tabungan = [] #problem
        d = {}
      
        isi = [[line[0], line[1], int(line[2]) + int(line[3]) + int(line[4]) + int(line[5])]]
        format = ["name","price","total total"]
        for item in isi:
            for key, value in zip(format,item):
                d[key] = value
        tabungan.append(d)
    
        print(tabungan)

output:

[{'name': 'Aradea', 'price': '500', 'total': 225}
{'name': 'Safwan', 'price': '300', 'total': 200}
{'name': 'Fatima', 'price': '250', 'total': 150}]

您可以通过以下方式获得所需的结果。

def baca_data(filename):

    result = []

    with open(filename, "r") as f:
        for line in f.readlines():
            d = {}
            arr = line.split()
            for i in range(0, len(arr), 2):
                d[arr[i]] = arr[i+1]
            result.append(d)
            
    print(result)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM