编写一个将读取如下所示CSV文件的函数flowers.csv:
petunia,5.95
alyssum,3.95
begonia,5.95
sunflower,5.95
coelius,4.95
查找一朵花的价格并打印出该价格。
import csv
def problem3_7(csv_pricefile, flower):
f = open(csv_pricefile)
for row in f:
if row[0] == flower:
print (row[1])
f.close()
我考虑过将CSV文件转换成字典,以便通过搜索花朵来定价。我确实相信通过比较行有更好的方法,但是我似乎无法弄清楚该怎么做。
一行将由例如petunia, 5.95
组成,而不仅仅是petunia
,这意味着我无法比较rows == flower
。我尝试使用row[0][0]
,因为它仅指花朵的名称,但对我实际上并不起作用。
而且...我想我应该使用一些我目前不使用的csv函数。
有人可以帮我吗?
答案 0 :(得分:2)
您可以使用csv.reader
和字典理解来构建花朵名称和价格之间的映射:
from io import StringIO
import csv
mystr = StringIO("""petunia,5.95
alyssum,3.95
begonia,5.95
sunflower,5.95
coelius,4.95""")
# replace mystr with open(csv_pricefile)
with mystr as fin:
reader = csv.reader(fin)
flower_prices = {name: float(price) for name, price in reader}
print(flower_prices)
{'alyssum': 3.95,
'begonia': 5.95,
'coelius': 4.95,
'petunia': 5.95,
'sunflower': 5.95}
然后通过字典提取特定花朵的价格,例如矮牵牛使用flower_prices['petunia']
。
答案 1 :(得分:0)
您正在将花朵与第一个字符而不是组成部分进行比较。尝试使用:
Post.joins(:tags).where(Tag.arel_table[:title].in(['tagName1', 'tagName']))
答案 2 :(得分:0)
您可以像这样使用pandas
:
import pandas as pd
with open(csv_pricefile, 'r') as pricefile:
df = pd.read_csv(pricefile, names=['flower', 'price'], index_col=0)
data = df.to_dict(orient='index')
# now you can get the price
print(data[flower]['price'])
答案 3 :(得分:0)
import pandas as pd
src = "/path/to/data.csv"
df = pd.read_csv(src, names=["flower","price"])
print df
# flower price
# 0 petunia 5.95
# 1 alyssum 3.95
# 2 begonia 5.95
# 3 sunflower 5.95
# 4 coelius 4.95
# Retrieve the row with a flower called petunia
row_result = df.loc[df['flower'] == 'petunia']
print row_result
# flower price
# 0 petunia 5.95
# Retrieve the price of the first row
if row_result:
price = row_result.iloc[0]['price']
print price
# 5.95
else:
print "Not Found"