python - 为什么 len() 函数会计算列表中的每个字符?
问题描述
我正在尝试将变量设置为已预订的天数。我将预订的日期存储在字典中,键为“booked_days”,值为字符串列表。问题是当我使用 len() 函数尝试查找列表中的事物数量时,我得到的值大于 100,而正确的输出应该在 15-30 左右。
我试图用每次迭代递增的变量遍历列表。这是我注意到列表中的每个字符都在索引中的地方。例如每个空格、逗号和引号。
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。我认为仅此代码不会重现该问题。但是我不知道问题可能来自哪里。打印语句仅用于我自己的调试目的。
任何想法都非常感谢。
解决方案
因为booked_days
是列表的字符串表示,而不是列表。调用len()
字符串将给出字符串中的字符数。
如果要解释booked_days
为列表,则需要更改读取 CSV 文件的方式,因此您的 dict 实际上包含列表而不是字符串。
推荐阅读
- laravel - 如何仅修复路由问题/路由在实时服务器上工作而不是其他?
- pandas - 大熊猫分组并总和显示值
- javascript - 如何在本机反应中转到顶部选项卡导航中的另一个屏幕
- azure-active-directory - MSAL SDK 与 ROPC 身份验证流程结合证书断言 - 是可能的
- python - 使用 Python 将数据推送到在线 GitHub 存储库
- drupal - Drupal 7如何仅发送drupal_email密件抄送而不发送地址
- qt - 捕捉 QML 组件状态/进度变化信号
- java - Spring Integration IMAP:由于 Outlook 365 中的病毒扫描,无法从邮件中读取附件
- c# - 声明数据库上下文的控制器级实例
- c++ - 为什么使用“return”-fpermissive 出现 void 错误问题