python 遇到的坑:
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
- 1.
sorted(recommend_dict[u].items(), lambda x, y: cmp(x[1], y[1]), reverse=True) # python2
sorted(recommend_dict[u].items(), key = lambda x:x[1], reverse=True) # python3
- 2.
'dict_keys' object has no attribute 'sort'
d = {'a': 1}
d.keys() # dict_keys(['a'])
d.items() # dict_items([('a', 1)])
d.values() # dict_values([1])
k = d.keys(); k.sort() # AttributeError: 'dict_keys' object has no attribute 'sort'
dict的方法dict.keys(),dict.items(),dict.values()不会再返回列表,而是返回一个易读的“views”。这样一来,像这样的语法将不再有用了:k = d.keys();k.sort(),你可以使用k = sorted(d)来代替。sorted(d)在Python2.5及以后的版本中也有用,但是Python3效率更高了。
map()和filter()将返回iterators。如果你真的想要得到列表,list(map(…))是一个快速的方法,但是更好的方法是使用列表推导(尤其是原代码使用了lambda表达式的时候),或者重写原来的代码,改为不需要使用列表。特别是map()会给函数带来副作用,正确的方法是改为使用for循环,因为创建一个列表是非常浪费的事情。
3.
saver = tf.train.Saver(self.b.values() + self.W.values())
TypeError: unsupported operand type(s) for +: ‘dict_values’ and ‘dict_values’
修改如下:
saver = tf.train.Saver(list(self.b.values()) + list(self.W.values()))
4.
print >> fout, “Epoch : %d loss : %.3f” % (epochs, loss)
TypeError: unsupported operand type(s) for >>: ‘builtin_function_or_method’ and ‘_io.TextIOWrapper’
修改如下:
print("Epoch : %d loss : %.3f" % (epochs, loss), file=fout)
5.
import random
outcomes = {'heads':0, 'tails':0}
sides = outcomes.keys()
print(sides[0])
会产生错误:TypeError: ‘dict_keys’ object does not support indexing
这是由于python3改变了dict.keys,返回的是dict_keys对象,支持iterable
但不支持indexable,我们可以将其明确的转化成list:
import random
outcomes = {'heads':0, 'tails':0}
sides = list(outcomes.keys())
print(sides[0]) # 输出tails
6.
在Python2中map函数会返回一个list列表,如代码:
>>> def f(x, y): return (x, y)
>>> l1 = [ 0, 1, 2, 3, 4, 5, 6 ]
>>> l2 = [ 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' ]
>>> map(f, l1, l2)
[(0, 'Sun'), (1, 'Mon'), (2, 'Tue'), (3, 'Wed'), (4, 'Thu'), (5, 'Fri'), (6, 'Sat')]
但是,在Python3中返回结果如下:
>>> map(f1, l1, l2)
<map object at 0x00000000021DA860>
如果想要得到Python2的那种结果,即返回list列表,那么必须用list作用于map,如下:
>>> list(map(f1, l1, l2))
[(0, 'Sun'), (1, 'Mon'), (2, 'Tue'), (3, 'Wed'), (4, 'Thu'), (5, 'Fri'), (6, 'Sat')]