Python:AttributeError:'tuple'对象没有属性'setdefault'

时间:2013-05-19 14:18:08

标签: python python-2.7 dictionary reduce

说出像这样的元组列表:

y=[('a', 'b', 'c'),
 ('a', 'c', 'b'),
 ('b', 'a', 'c'),
 ('b', 'c', 'a'),
 ('c', 'a', 'b'),
 ('c', 'b', 'a')]

我正在尝试使用reduce()功能在y中创建每个元素的字符串。 ''.join(list(x)给出了第一次迭代的'abc'。

z=reduce(lambda x, u=dict(): u.setdefault(''.join(list(x)), []).extend(''.join(list(x))), y)

错误:

AttributeError                            Traceback (most recent call last)
<ipython-input-102-79858e678e78> in <module>()
----> 1 z=reduce(lambda x, u=dict(): u.setdefault(''.join(list(x)), []).extend(''.join(list(x))), y)

<ipython-input-102-79858e678e78> in <lambda>(x, u)
----> 1 z=reduce(lambda x, u=dict(): u.setdefault(''.join(list(x)), []).extend(''.join(list(x))), y)

AttributeError: 'tuple' object has no attribute 'setdefault'

2 个答案:

答案 0 :(得分:2)

不清楚为何减少参与。你在寻找:

[''.join(t) for t in y]

答案 1 :(得分:1)

使用2个参数始终调用

reduce(),因此您的u参数设置为y中的第二个值,即元组。默认值被忽略。

你真的不应该在这里使用reduce()。当你想在迭代器中使用 next 元素进行每次循环迭代来计算一个聚合值时,你需要reduce()

您正在映射

map(''.join, y)

或使用列表理解:

[''.join(x) for x in y]