我正在尝试将一个变量设置为已预订的天数。我将预订的天数存储在字典中,键为“ booked_days”,其值是字符串列表。 问题是当我使用len()函数尝试查找列表中的内容时,当正确的输出应该在15-30之间时,我得到的值大于100。
我试图遍历列表,每次迭代都会增加一个变量。这是我注意到列表中索引中包含每个字符的地方。例如,每个空格,逗号和引号。
with open('./' + self.listing + '/' + current_year + '.txt', 'r', newline='') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
self.annual_revenue += int(row['revenue'])
if row['month'] == self.month_to_see:
self.revenue = int(row['revenue'])
self.occupancy_rate = row['occupancy']
self.booked_num = len(row['booked_days'])
print(row)
print()
print(row['booked_days'] + '\n')
print(len(row['booked_days']))
这是词典行的打印件。
OrderedDict([('month', 'August'), ('year', '2019'), ('given_rate', '$225'), ('available_days', "[('27', '$225'), ('28', '$225'), ('29', '$225'), ('30', '$225'), ('31', '$225')]"), ('booked_days', "['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26']"), ('revenue', '5850'), ('rating', '5'), ('occupancy', '83.9')])
期望的输出为26,但是实际的输出为147。我不认为仅此代码就能重现问题。但是我不知道问题可能还会从何而来。 打印语句仅用于我自己的调试目的。
任何想法都会受到赞赏。
答案 0 :(得分:0)
因为'\&'
是列表的字符串表示形式,而不是列表。在字符串上调用booked_days
将给出字符串中的字符数。
如果您想将len()
解释为列表,则需要更改CSV文件中的读取方式,因此您的字典实际上包含列表而不是字符串。
答案 1 :(得分:0)
查看条目:
booked_days
'booked_days', "['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12',
'13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23',
'24', '25', '26']")
是字符串,而不是列表。其row['booked_days']
是字符数。您可能必须通过使用JSON阅读器或其他软件包将字符串转换为列表,而不是CSV存储。 CSV无法识别其单元格的字典和列表格式。
例如,请参见文本转换here。