带有true和false的python列表不是True和False

时间:2014-02-20 10:02:25

标签: python

-----------------------更新---------------------- < / p>

由于存在很多混乱,我决定给出更详细的解释。看看下面的代码,并专注于

day = {"days": buildString2(day_array[i])}

以下是代码:

import csv, sys, requests, json, os, itertools, ast

def buildString(item):
    item_array = item.split(",")
    mod = []
    for i in range(len(item_array)):
        mod.append("%s" % item_array[i].strip())
    return mod

def buildString2(item):
    item_array = item.split(",")
    mod = "["
    for i in range(len(item_array)):
        if i == len(item_array) - 1:
            mod = mod + '%s' % item_array[i].strip()
        else:
            mod = mod + '%s, ' % item_array[i].strip()
    mod = mod + "]"
    return mod

if __name__ == '__main__':
    def main():
        filename = 'file.csv'
        dict = {"id":'c8d5185667f'}

        with open(filename, 'r', encoding='utf8') as f:
            reader = csv.reader(f)
            try:
                count = 0
                for row in reader:
                    count = count + 1
                    if count != 1:

                        dict["name"] = row[10]

                        dict["space_usages"] = buildString(row[19])

                        availablle_array = []
                        available_booking_hours = row[15]
                        days = row[18]
                        availability_array = available_booking_hours.split("*")
                        day_array = days.split("*")
                        for i in range(len(day_array)):
                            startEndTime = availability_array[i].split("-")
                            day = {"days": buildString2(day_array[i])}
                            times = {"start_time":startEndTime[0], "end_time":startEndTime[1]}
                            day["times"] = times
                            availablle_array.append(day)

                        dict["available_days"] = availablle_array

                        print(dict)
                        url = 'http://50.97.247.68:9000/api/v1/spaces'
                        response = requests.post(url, data=json.dumps(dict))

当我打印dict时,我得到以下内容

{'id': 'c8d5185667f', 'available_days': [{'days': '[true, true, true, true, true, true, true]', 'times': {'start_time': '12:00', 'end_time': '10:00'}}], 'space_usages': ['Fitness', 'Events', 'Classes', 'Performance']}

但是我的老板想要这个

{'id': 'c8d5185667f', 'available_days': [{'days': [true, true, true, true, true, true, true], 'times': {'start_time': '12:00', 'end_time': '10:00'}}], 'space_usages': ['Fitness', 'Events', 'Classes', 'Performance']}

这不起作用

{'id': 'c8d5185667f', 'available_days': [{'days': ['true', 'true', 'true', 'true', 'true', 'true', 'true'], 'times': {'start_time': '12:00', 'end_time': '10:00'}}], 'space_usages': ['Fitness', 'Events', 'Classes', 'Performance']}

这更有意义吗?是否有可能获得

[true, true, true, true, true, true, true]

作为一个值?我试过这个

day = {"days": ast.literal_eval(buildString2(day_array[i]))}

但它崩溃了。我没有想法。我试过谷歌搜索各种各样的东西,我似乎找不到任何东西。非常感谢您的帮助。老实说,我不相信这是可能的,但这就是我被告知要做的事情。

注意:它们必须是小写的。这不起作用

[True, True, True, True, True, True, True]

4 个答案:

答案 0 :(得分:4)

这是JSON,因此您应该将您的周转换为JSON格式

In [1]: import simplejson as json
In [2]: week = [True, False, True, True]
In [3]: json.dumps(week)
Out[3]: '[true, false, true, true]'

要转换回来,只需加载并解析它:

In [8]: print json.loads('[true, false, false, true]')
[True, False, False, True]

答案 1 :(得分:2)

您可以使用json module将布尔列表转换为字符串并相互反复:

>>> import json
>>> json.dumps([True, False, True, True, False])
'[true, false, true, true, false]'
>>> json.loads('[true, false, true, true, false]')
[True, False, True, True, False]

答案 2 :(得分:0)

你的价值是

week = '[true, false, true, false, true, false, true]'

这是JSON表示。第二个值是

week = ['true', 'false', 'true', 'false', 'true', 'false', 'true']

哪个是带有“true”和“false”字符串的List。

week = [True, False, True, False, True, False, True]

这是纯Python代码。

您必须决定使用哪个值以及选择哪种方式将其转换为哪种形式。

对于第一个值,您可以使用json.loads

对于第二个值,您必须手动检查字符串是否为“true”和“false”

第三个是python,所以不需要再次在python中更改它:)。

答案 3 :(得分:0)

可能获得老板想要的东西,只是不使用内置的True和False:

class MyBool(object):
    def __init__(self, value):
        self.value = bool(value)
    def __repr__(self):
        return repr(self.value).lower()
    def __bool__(self):
        return self.value

print({'a' : [MyBool(True), MyBool(True), MyBool(False)]})

结果:

{'a': [true, true, false]}

您实际上并不需要__bool__,但(在Python 3中)它允许在逻辑条件下使用对象。

根据要求,它不是有效的Python文字,因为它使用true而不是True,并且它不是有效的JSON,因为它使用单引号键而不是双引号。据推测它是由不接受True的东西解析而且也不接受双引号字符串?我不认为有任何机会只修复原始API以接受JSON吗?