是否有标准库函数或更多pythonic方法来执行此操作?
def itemize(i):
if type(i) is list:
return i
return [i]
上下文:
在从单值到列表的db(nosql样式)迁移中很有用
doc = <get doc from db>
for i in itemize(doc.var1):
#blah
或
doc.var1 = itemize(doc.var1)
答案 0 :(得分:4)
通常,强制执行此类操作是个坏主意。在许多情况下,您可以做的最蟒蛇的事情是检查您的项目是否是序列:
import collections
def to_sequence(item):
return item if isinstance(item,collections.Sequence) else [item]
这个传递可能不想传递的内容的一个实例是字符串...字符串是序列,因此to_sequence('foo')
将返回'foo'
,而不是{{ 1}} - 但你不太可能希望它是['foo']
......所以如果需要,你可能需要特殊情况。
一个简单的解决方法是(对于python2.x):
['f','o','o']
但同样,通常“pythonic”要做的是推迟这种检查,并尝试在某些情况下使用该对象 - 如果失败,那么你可以做一些反应。
答案 1 :(得分:2)
def itemize(i):
try:
return list(i) # Will return a list if provided an iterable
except TypeError:
return [i]
不完全确定为什么你认为你需要这个,它可能是你真正需要的其他地方的问题。
答案 2 :(得分:2)
如果你必须键入check(你通常应该在python中避免,我希望在这里看到一些需要的上下文),你可以使用这个使用isinstance
的速记,这是更好的。< / p>
def makelist(i):
return i if isinstance(i, list) else [i]