我一直在努力为我的朋友解决问题。但是,它似乎让我感到烦恼,因为我无法映射两个文件中的键值。
问题描述:
第一个文件(sales.txt)有内容:
Apple 30
Grape 90
Cup 35
Toy 100
Apple 50
Grape 51
Toy 83
第二个文件(price.txt)有内容:
Apple 1.3
Grape 0.99
Cup 1.5
Toy 15
工作是打印总价。在这种情况下,我们需要打印3041.09。
我知道我们需要使用字典并根据键映射两个字典。因此,我根据我的知识编写了代码。 (非常抱歉,如果它是愚蠢的!)
f = "sales.txt"
d={}
for line in open(f):
a=line.split()
key, values = str(a[0]), int(a[1])
d.setdefault(key, []).append(int(values))
print(d)
d = dict((key, sum(values)) for key, values in d.items())
print(d)
g = "price.txt"
dy={}
for line in open(g):
b=line.split()
unit, price = str(b[0]), float(b[1])
dy.setdefault(unit, []).append(float(price))
print(dy)
total = 1.0
for i in range(0, len(d)):
if d[key] == dy[unit]:
total = d.values*dy.price
print(total)
问题发生在if条件下,因为它没有进入循环。修正?
答案 0 :(得分:0)
我没有运行你的代码,但是在你做的时候似乎:
dy.setdefault(unit, []).append(float(price))
您正在向键添加数组而不是标量 - >像Apple:[1.3]而不是Apple:1.3
然后在最后一个循环中,执行类似
的操作for item,count in d.items():
total += count*dy[item]
答案 1 :(得分:0)
而不是:
total = 1.0
for i in range(0, len(d)):
if d[key] == dy[unit]:
total = d.values*dy.price
使用:
# the total should start at 0.
total = 0.0
for k in d:
total = total + d[k]*dy[k]
这将迭代d
中的所有键并获取数量和价格,将它们相乘并更新总数。
答案 2 :(得分:0)
可以使用第一个循环中的运行计数稍微简化一下,然后只计算第二个循环中的总计数:
with open("sales.txt") as f:
d = {}
for line in f:
key, value = line.split()
d[key] = d.get(key, 0) + int(value)
with open("price.txt") as g:
total = sum(d[key] * float(price) for line in g for key, price in [line.split()])
print(total)
#3041.09