Python /分配元组

时间:2016-02-24 13:11:58

标签: python

我在python中有以下代码:

stage = OrderedDict([('a', '5678), ('b', '56')])

log.info("1")
log.info(stage.items()[0][1])
stage.items()[0] = ('a', '1234')
log.info("2")
log.info(stage.items()[0][1])
log.info("3")

它打印以下内容:

1
5678
2
5678
3

我认为我将值stage.items()[0][1]分配给1234

stageOrderedDict,如下所示:OrderedDict([('a', '5678), ('b', '56')])

可能是什么原因?

2 个答案:

答案 0 :(得分:1)

OrderdDictdict个。会员可以通过密钥访问,而不是通过positon访问:

stage = OrderedDict([('a', '5678'), ('b', '56')])
print(stage["a"])
stage["a"] = 'changed'
print(stage)

输出:

'5678'
OrderedDict([('a', 'changed'), ('b', '56')])

答案 1 :(得分:0)

要回答您的问题,最好是查看OrderedDict的items方法的确切代码来源:

def items(self):
        'od.items() -> list of (key, value) pairs in od'
        return [(key, self[key]) for key in self]

所以读到这一点,很明显为什么更改项目元素不会改变你的字典。正如我上面假设的那样,你调用的函数不会直接返回数据成员,但它会在列表中重写字典的值并返回该列表。

请注意,您可以执行以下操作:

d = OrderedDict({'a':[0]})
d.items()[0][1].append(1)

这实际上会修改您的列表。

在您的具体示例中,如果要修改字典,可以执行以下操作:

d[d.keys()[0]] = 3