一个非常幼稚的问题,但是有一种强大或更好的方法可以遵循。 说它实际上与json无关。
假设我有列表(从文件中读取)
string_list = [ "foo",1,None, "null","[]","bar"]
现在,null and []
基本上等同于null,但不同的数据结构对" None"有不同的解释。正确?
所以,而不是我为所有这些规则编写正则表达式..是否有更好的方法来转换" null"," []"等等没有.. ??
由于
答案 0 :(得分:2)
定义一组应该用None
替换的值,并使用list comprehension来“替换”它们:
>>> 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']
由于O(1)查找而使用set
。
答案 1 :(得分:1)
你可以尝试:
string_list = [ "foo",1,None, "null","[]","bar"]
nones = [ "null", "[]" ]
print([None if s in nones else s for s in string_list])
答案 2 :(得分:0)
1)您不应将任何内容转换为无。
2)你要做的第一件事是转换为json。 json模块将null转换为None,因此您不必担心null。并且空的json字符串,数组和对象将被转换为空的python字符串,列表和dicts,因此您根本不会处理字符串。
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。