1

一个非常幼稚的问题,但是否有一种强大或更好的方法来进行跟踪。说它实际上与json无关。

假设我有列表(从文件中读取)

string_list = [ "foo",1,None, "null","[]","bar"]

现在,null and []基本上等同于 null 但不同的数据结构对“无”有不同的解释??正确的?

因此,与其为所有这些规则编写正则表达式.. 有没有更好的方法将“null”、“[]”等转换为 None.. ??

谢谢

4

3 回答 3

2

定义一组应该被替换的值None并使用列表推导来“替换”它们:

>>> string_list = [ "foo",1,None, "null","[]","bar"]
>>> none_items = {"null", "[]"}  # or set(("null", "[]"))
>>> [None if item in none_items else item for item in string_list]
['foo', 1, None, None, None, 'bar']

或者,使用map()

>>> map(lambda x: None if x in none_items else x, string_list)
['foo', 1, None, None, None, 'bar']

set由于 O(1) 查找而使用。

于 2013-09-17T22:39:14.220 回答
1

1)你不应该将任何东西转换为无。

2)您要做的第一件事是转换为json。json 模块会将 null 转换为 None,因此您不必担心 null。空的 json 字符串、数组和对象,将被转换为空的 python 字符串、列表和字典,所以你根本不用处理字符串。

3)然后如果你想过滤掉空对象,你可以这样做:

import json

my_data = json.loads("""
    [
        "hello", 
        "", 
        [], 
        {}, 
        [1, 2, 3], 
        {"a": 1, "b": 2}
    ] 
""")

print(my_data)
print([x for x in my_data if x])

--output:--
['hello', '', [], {}, [1, 2, 3], {'a': 1, 'b': 2}]
['hello', [1, 2, 3], {'a': 1, 'b': 2}]

空对象(包括 0)评估为 False。

于 2013-09-17T23:22:14.630 回答
1

你可以试试:

string_list = [ "foo",1,None, "null","[]","bar"]
nones = [ "null", "[]" ]
print([None if s in nones else s for s in string_list])
于 2013-09-17T22:40:03.123 回答