【问题标题】:make dictionaries from list with multiple values for each key从列表中为每个键创建多个值的字典
【发布时间】:2021-12-17 11:44:36
【问题描述】:

我们需要从名为 Initial_inventory-1.txt 的同一个文本文件中创建两个字典,一个用于价格,另一个用于数量。两个字典都将产品名称作为字典中的键。

我的输出给出了一个字典,其中包含名称、价格,然后是名称的第一个字母,我不知道为什么。两个字典都会发生这种情况。

def read_file(file_name, prices, quantities):
    file = open(file_name, 'r')

    for line in file:
        product = line.strip('\n').split(';')
        name, price = product[0], product[1]
        prices[name] = price
        for price in product[0]:
            prices.setdefault(price, []).append(name)
        name, quantity = product[0], product[2]
        quantities[name] = quantity
        for quantity in product[0]:
            quantities.setdefault(quantity, []).append(name)
        
            
    print(prices)
    print(quantities)
    

主要功能:

def main():
    #init dictionaries
    prices = {}
    quantities = {}
    #read_file
    read_file("initial_inventory-1.txt", prices, quantities)
main()

任务还有更多内容,这就是为什么它们在这些功能中,我无法摆脱它们。提前谢谢!

【问题讨论】:

  • product[0] 是一个字符串。你觉得for price in product[0] 是做什么的?
  • 在分配nameprice后尝试打印出来,也许你会自己发现问题。

标签: python loops file dictionary


【解决方案1】:

product[0]是产品名称,是一个字符串。当您对其进行迭代时,您正在迭代名称中的字符。

pricesquantities 字典的键应该是 name。您应该使用它作为setdefault() 的第一个参数。你不应该先分配给字典,那是用这个价格和数量替换价格和数量列表。

def read_file(file_name, prices, quantities):
    file = open(file_name, 'r')

    for line in file:
        name, price, quantity = line.strip('\n').split(';')
        prices.setdefault(name, []).append(price)
        quantities.setdefault(name, []).append(quantity)
        
            
    print(prices)
    print(quantities)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 2022-06-27
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    相关资源
    最近更新 更多