python - 从列表中为每个键创建多个值的字典
问题描述
我们需要从名为 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]
是产品名称,它是一个字符串。当您迭代它时,您正在迭代名称中的字符。
prices
和字典的键quantities
应该是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)
推荐阅读
- python-3.x - 即使在等待关闭后,aiohttp 仍表示未公开的客户端会话
- spring - 从 Spring 4 升级到 Spring 5 并遇到 @Autowired 强制问题。请问有什么解决方法吗?
- db2 - 如何使用 sql developer tool 执行并查看以下 DB2 存储过程的结果集
- swift - substring(with:)' 已弃用:请使用字符串切片下标
- amazon-cognito - AWS Cognito 中基于 OTP 和 truecaller 的自定义身份验证流程
- php - codeigniter 调用库函数停止 foreach 循环
- apache-spark - 异常 java.util.NoSuchElementException: None.get in Spark Dataset save() operation
- ssl - 阻止 IIS 为其他 localhost 网站使用 SSL 证书
- tsql - 插入时聚集的列存储索引性能不佳
- javascript - Javascript 中 filter() 后无法获取值