1

例如,我有一个元组

a = ('chicken', 1, 'lemon', 'watermelon', 'camel')

我想建立一个新的元组ba但稍微改变一下

d = {0: 'apple', 1: 'banana', 2: 'lemon', 3: 'watermelon'}

b = (a[0], d[a[1]], a[2], a[3], a[4])

另一种方法

b = list(a)
b[1] = d[b[1]]
b = tuple(b)

他们都工作,但看起来很傻。

还有另一种优雅的方式来完成这项工作吗?还是有一些技巧可以修改原始元组?

4

2 回答 2

4

与您的相比,这有点低效,因为它会检查每个项目,但一般的想法是它查看您的每个项目a,检查匹配的键,d如果找到一个,则返回该键的值. 如果没有找到键,则返回原始项:

In [1]: a = ('chicken',1,'lemon','watermelon','camel')

In [2]: d = {0:'apple',1:'banana',2:'lemon',3:'watermelon'}

In [3]: b = tuple(d.get(x, x) for x in a)

In [4]: b
Out[4]: ('chicken', 'banana', 'lemon', 'watermelon', 'camel')

In [5]: type(b)
Out[5]: <type 'tuple'>
于 2013-01-18T08:06:05.580 回答
1

我不知道你所说的“优雅”是什么意思,但如果你想要更通用的东西,只是替换 'a' 元组中在 'd' 中有键的元素,你可以使用生成器表达式并执行以下操作:

>>> a
('chicken', 1, 'lemon', 'watermelon', 'camel')
>>> d
{0: 'apple', 1: 'banana', 2: 'lemon', 3: 'watermelon'}
>>> tuple(d[x] if x in d else x for x in a)
('chicken', 'banana', 'lemon', 'watermelon', 'camel')

它构造了一个新的元组,因为元组是不可变的。

于 2013-01-18T08:21:02.430 回答