首页 > 解决方案 > 为什么 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。我认为仅此代码不会重现该问题。但是我不知道问题可能来自哪里。打印语句仅用于我自己的调试目的。

任何想法都非常感谢。

标签: pythonlistdictionary

解决方案


因为booked_days是列表的字符串表示,而不是列表。调用len()字符串将给出字符串中的字符数。

如果要解释booked_days为列表,则需要更改读取 CSV 文件的方式,因此您的 dict 实际上包含列表而不是字符串。


推荐阅读