Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将三个列表转换为一个词典?_Python - Fatal编程技术网

Python 如何将三个列表转换为一个词典?

Python 如何将三个列表转换为一个词典?,python,Python,我有一个库存程序,它将ID号、项目名称和数量存储在三个不同的列表中。这三个列表组合在一个清单列表中,但当数据保存到文本编辑文档时,它将数据存储在三个不同的列表中。如何将此数据保存在一个字典中。首先是ID号、项目名称,然后是数量 以下是完整的程序代码: import os class Inventory: def __init__(self): #AT LAUNCH GROUPS AND LOADING FUNCTION self.ID = []

我有一个库存程序,它将ID号、项目名称和数量存储在三个不同的列表中。这三个列表组合在一个清单列表中,但当数据保存到文本编辑文档时,它将数据存储在三个不同的列表中。如何将此数据保存在一个字典中。首先是ID号、项目名称,然后是数量

以下是完整的程序代码:

import os

class Inventory:
    def __init__(self):
    #AT LAUNCH GROUPS AND LOADING FUNCTION
        self.ID = []
        self.item = []
        self.qty = []
        self.load()

    def remove(self, ID):
        #REMOVING ITEMS FOR LISTS AND OUTPUT DOCUMENT
        ix = self.ID.index(ID)
        self.ID.pop(ix)
        self.item.pop(ix)
        self.qty.pop(ix)
        self.save()

    def add(self, ID, name, qty):
        #ADDING ITEMS FOR LISTS AND OUTPUT DOCUMENT
        self.ID.append(ID)
        self.item.append(name)
        self.qty.append(qty)
        self.save()

    def update(self, ID, update):
        #UPDATING ITEMS FOR LISTS AND OUTPUT DOCUMENT
        if update >= 0:
            self.qty[self.ID.index(ID)] += update
        elif update <= -1:
            self.qty[self.ID.index(ID)] += update
        self.save()

    def search(self, ID):
        #SEARCHING ITEMS FOR LISTS
        pos = self.ID.index(ID) if ID in self.ID else -1
        if pos >= 0:
            return self.ID[pos], self.item[pos], self.qty[pos] 
        else:
            return None

    def __str__(self):
        #FORMATTING
        out = ""
        zipo = list(zip(self.ID, self.item, self.qty))
        for foobar in zipo:
            out += f"ID Number : {foobar[0]} \nItem Name : {foobar[1]}\nQuantity : {foobar[2]}\n"
            out += "----------\n"
        return out
    
    def save(self):
        #WHERE TO SAVE TO
        with open('inventory.dat','w') as f:
           f.write(str(self.ID) + '\n' + str(self.item) + '\n' + str(self.qty))

    def load(self):
        #WHERE TO PUT DATA FROM WHEN RELAUNCHING PROGRAM
        from os import path
        if path.exists('inventory.dat'):
            with open('inventory.dat','r') as f:
               lns = f.readlines()
               self.ID = eval(lns[0])
               self.item = eval(lns[1])
               self.qty = eval(lns[2])



def menuDisplay():
    #MENU FOR PROGRAM 
    """Display the menu"""
    print('=============================')
    print('= Inventory Management Menu =')
    print('=============================')
    print('(1) Add New Item to Inventory')
    print('(2) Remove Item from Inventory')
    print('(3) Update Inventory')
    print('(4) Search Item in Inventory')
    print('(5) Print Inventory Report')
    print('(99) Quit')


def add_one_item(inventory):
    #ADDING PROMPT AND ERROR CHECKING
    print('Adding Inventory')
    print('================')
    while True:
        try:
            new_ID = int(input("Enter an ID number for the item: "))
            if new_ID in inventory.ID:
                print("ID number is taken, please enter a different ID number")
                continue
            new_name = input('Enter the name of the item: ').lower()
            assert new_name.isalpha(), "Only letters are allowed!"
            new_qty = int(input("Enter the quantity of the item: "))
            inventory.add(new_ID, new_name, new_qty)
            break
        except Exception as e:
            print("Invalid choice! try again! " + str(e))
            print()


def remove_one_item(inventory):
    #REMOVING PROMPT AND ERROR CHECKING
    print('Removing Inventory')
    print('==================')
    removing = int(input("Enter the item's ID number to remove from inventory: "))
    inventory.remove(removing)


def ask_exit_or_continue():
    #OPTION TO CONTINUE OR QUITE PROGRAM
    return int(input('Enter 98 to continue or 99 to exit: '))


def update_inventory(inventory):
    #UPDATING PROMPT AND ERROR CHECKING
    print('Updating Inventory')
    print('==================')
    ID = int(input("Enter the item's ID number to update: "))
    update = int(input("Enter the updated quantity. Enter 5 for additional or -5 for less: "))
    inventory.update(ID, update)


def search_inventory(inventory):
    #SEARCHING PROMPT AND ERROR CHECKING
    print('Searching Inventory')
    print('===================')
    search = int(input("Enter the ID number of the item: "))
    result = inventory.search(search)
    if result is None:
        print("Item not in inventory")
    else:
        ID, name, qty = result
        print('ID Number: ', ID)
        print('Item:     ', name)
        print('Quantity: ', qty)
        print('----------')


def print_inventory(inventory):
    #PRINT CURRENT LIST OF ITEMS IN INVENTORY
    print('Current Inventory')
    print('=================')
    print(inventory)


def main():
    #PROGRAM RUNNING COMMAND AND ERROR CHECKING
    inventory = Inventory()
    while True:
        try:
            menuDisplay()
            CHOICE = int(input("Enter choice: "))
            if CHOICE in [1, 2, 3, 4, 5]:
                if CHOICE == 1:
                    add_one_item(inventory)
                elif CHOICE == 2:
                    remove_one_item(inventory)
                elif CHOICE == 3:
                    update_inventory(inventory)
                elif CHOICE == 4:
                    search_inventory(inventory)
                elif CHOICE == 5:
                    print_inventory(inventory)
                exit_choice = ask_exit_or_continue()
                if exit_choice == 99:
                    exit()
            elif CHOICE == 99:
                exit()
        except Exception as e:
            print("Invalid choice! try again!"+str(e))
            print()

        # If the user pick an invalid choice,
        # the program will come to here and
        # then loop back.


main()
导入操作系统
类别清单:
定义初始化(自):
#AT启动组和加载功能
self.ID=[]
self.item=[]
self.qty=[]
self.load()
def移除(自身,ID):
#删除列表和输出文档的项
ix=自身ID索引(ID)
self.ID.pop(ix)
self.item.pop(九)
自身数量pop(九)
self.save()
def添加(自身、ID、名称、数量):
#为列表和输出文档添加项
self.ID.append(ID)
self.item.append(名称)
自身追加数量(数量)
self.save()
def更新(自我、ID、更新):
#更新列表和输出文档的项目
如果更新>=0:
自身数量[自身ID索引(ID)]+=更新
elif update=0:
退货自标识[pos],自项目[pos],自数量[pos]
其他:
一无所获
定义(自我):
#格式化
out=“”
zipo=列表(zip(self.ID、self.item、self.qty))
淄博福巴:
out+=f“ID编号:{foobar[0]}\n项目名称:{foobar[1]}\n属性:{foobar[2]}\n”
out+=“------------\n”
返回
def保存(自我):
#保存到哪里
以未结('inventory.dat','w')作为f:
f、 写入(str(self.ID)+'\n'+str(self.item)+'\n'+str(self.qty))
def加载(自):
#重新启动程序时从何处放置数据
从操作系统导入路径
如果路径存在('inventory.dat'):
以未结('inventory.dat','r')作为f:
lns=f.读线()
self.ID=eval(lns[0])
self.item=eval(lns[1])
自身数量=评估(lns[2])
def menuDisplay():
#程序菜单
“”“显示菜单”“”
打印('========================================')
打印('=库存管理菜单=')
打印('========================================')
打印(‘(1)将新项目添加到库存’)
打印(‘(2)从库存中删除项目’)
打印(‘(3)更新库存’)
打印(‘(4)库存中的搜索项目’)
打印(‘(5)打印库存报告’)
打印(‘(99)退出’)
def添加一个项目(库存):
#添加提示和错误检查
打印('添加库存')
打印('======================')
尽管如此:
尝试:
new_ID=int(输入(“为项目输入ID号:”))
如果inventory.ID中有新的\u ID:
打印(“已获取身份证号码,请输入其他身份证号码”)
持续
new_name=input('输入项的名称:')。lower()
断言new_name.isalpha(),“只允许使用字母!”
新建数量=整数(输入(“输入项目数量:”)
库存.添加(新库存标识、新库存名称、新库存数量)
打破
例外情况除外,如e:
打印(“无效选择!重试!”+str(e))
打印()
def移除一个项目(库存):
#删除提示和错误检查
打印('删除库存')
打印('======================')
removing=int(输入(“输入要从库存中删除的项目的ID号:”)
库存。删除(删除)
def ask_exit_或_continue():
#选择继续或停止该程序
返回int(输入('输入98继续,或输入99退出:'))
def更新_库存(库存):
#更新提示和错误检查
打印('更新库存')
打印('======================')
ID=int(输入(“输入要更新的项目ID号:”)
update=int(输入(“输入更新的数量。输入5表示额外数量,输入-5表示更少:”)
库存.更新(ID,更新)
def搜索_库存(库存):
#搜索提示和错误检查
打印('搜索库存')
打印('=========================')
search=int(输入(“输入项目的ID号:”)
结果=库存。搜索(搜索)
如果结果为无:
打印(“不在库存中的项目”)
其他:
ID、名称、数量=结果
打印('ID号:',ID)
打印('项目:',名称)
打印('数量:',数量)
打印('------------')
def打印库存(库存):
#打印库存中项目的当前列表
打印('当前库存')
打印('======================')
打印(库存)
def main():
#程序运行命令和错误检查
存货=存货()
尽管如此:
尝试:
menuDisplay()
CHOICE=int(输入(“输入选项:”)
如果在[1,2,3,4,5]中选择:
如果选项==1:
添加一个项目(库存)
elif选项==2:
删除一个项目(库存)
elif选项==3:
更新库存(库存)
elif选项==4:
搜索库存(库存)
elif选项==5:
打印库存(库存)
退出选择=询问退出或继续()
如果退出_选项==99:
退出()
elif选项==99:
退出()
例外情况除外,如e:
打印(“无效选择!重试!”+str(e))
打印()
#如果用户选择了无效的选项,
#节目将在这里播出
#然后循环返回。
main()

提前谢谢。

不要使用3个列表,请使用包含词典的词典。主字典的键将是id,值将是包含名称和数量的字典

您可以使用JSON或pickle来保存和加载数据

import os
import json

class Inventory:
    def __init__(self):
        #AT LAUNCH GROUPS AND LOADING FUNCTION
        self.items = {}
        self.load()

    def remove(self, ID):
        #REMOVING ITEMS FOR LISTS AND OUTPUT DOCUMENT
        del self.items[ID]
        self.save()

    def add(self, ID, name, qty):
        #ADDING ITEMS FOR LISTS AND OUTPUT DOCUMENT
        self.items[ID] = {"name": name, "qty": qty}
        self.save()

    def update(self, ID, update):
        #UPDATING ITEMS FOR LISTS AND OUTPUT DOCUMENT
        self.items[ID]["qty"] += update
        self.save()

    def search(self, ID):
        #SEARCHING ITEMS FOR LISTS
        item = self.items.get(ID, None)
        if item:
            return ID, item['name'], item['qty']
        else:
            return None

    def __str__(self):
        #FORMATTING
        out = ""
        for id, d in self.items.items():
            out += f"ID Number : {id} \nItem Name : {d['name']}\nQuantity : {d['qty']}\n"
            out += "----------\n"
        return out
    
    def save(self):
        #WHERE TO SAVE TO
        with open('inventory.dat','w') as f:
           json.dump(self.items, f)

    def load(self):
        #WHERE TO PUT DATA FROM WHEN RELAUNCHING PROGRAM
        try:
            with open('inventory.dat','r') as f:
               self.items = json.load(f)
        except:
            print("Can't load old inventory, starting fresh")
            self.items = {}
您应该避免访问属性
if new_ID in inventory.ID:
if inventory.search(new_ID):