我在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
。
stage
是OrderedDict
,如下所示:OrderedDict([('a', '5678), ('b', '56')])
可能是什么原因?
答案 0 :(得分:1)
OrderdDict
是dict
个。会员可以通过密钥访问,而不是通过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