1
mengzhuo 2014-12-03 10:34:25 +08:00
eval()
不用谢 跟给你这字符的人说:“还让不让人愉快地干活了!” |
2
hahastudio 2014-12-03 10:34:32 +08:00
没太明白= =
如果你是有一个列表/迭代器或者其他的,打印出来这个的话,有很简单的方法是 [i[1] for i in lst] 但如果你是指: s = """(u'one',{u'a':u"1",u'b':u'2'}),(u'two',{u'ass':u"f1",u'cb':u'2df'})""" 我能想到的方法就是 eval 了 [i[1] for i in eval("[" + s + "]", {'__builtins__':{}})] 不过,eval 绝对是 Python 里面应该避免使用的函数,看这篇文章 Eval really is dangerous http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html 直到我发现了 ast.literal_eval ast.literal_eval = literal_eval(node_or_string) Safely evaluate an expression node or a string containing a Python expression. The string or node provided may only consist of the following Python literal structures: strings, numbers, tuples, lists, dicts, booleans, and None. >>> [i[1] for i in ast.literal_eval("[" + s + "]")] [{u'a': u'1', u'b': u'2'}, {u'ass': u'f1', u'cb': u'2df'}] |
3
rrfeng 2014-12-03 10:35:24 +08:00
str = '''(u'one',{u'a':u"1",u'b':u'2'})'''
t = eval(str) t[1] |
4
unfurl 2014-12-03 10:35:45 +08:00
用正则在字符串里抠出 {u'a':u"1",u'b':u'2'}
然后将抠出的字符串传入 eval()方法即可 |
5
1989922yan 2014-12-03 10:39:12 +08:00
>>> a = ((u'one', {u'a': u'1', u'b': u'2'}), (u'two', {u'ass': u'f1', u'cb': u'2df'}))
>>> for i in a: print i[1] 这是你想要的? |
6
dbas OP 我的这个是个“tuple”
|
7
dbas OP 说错了。原来我的这个原型是(u'one',{u'a':u"1",u'b':u'2'}) (u'two',{u'ass':u"f1",u'cb':u'2df'}) 中间没有逗号
|
8
hahastudio 2014-12-03 11:02:27 +08:00
@dbas 那稍微改改就行啊,意思都一样
>>> [ast.literal_eval(t) for t in s.split(" ")] [(u'one', {u'a': u'1', u'b': u'2'}), (u'two', {u'ass': u'f1', u'cb': u'2df'})] 如果你还还需要更细致的切字符串的方式的话: * 用 re 匹配 * 修改上游数据的输出格式,这格式谁用谁别扭 如果你真需要传一个只包含 Python 默认类型的对象的话,为什么不用 cPickle 呢? |
9
dbas OP @hahastudio 没办法这个数据是从接口上得到的。我死的心都想有了
|
10
Muninn 2014-12-03 11:31:44 +08:00
接口里得到的是字符串,用一些json库的方法解析下就搞定了...
|