访问嵌套在字典中的元组的索引

时间:2017-08-01 06:32:33

标签: python dictionary indexing nested tuples

我正在尝试基于文本的国际象棋游戏,目前正在开发一个可用于计算棋盘位置的系统。以下是我正在采取的方法的片段:

_file = ('A','B','C','D','E','F','G','H')

A1 = {'File' : _file[0], 'Rank' : _rank[0],
'Color' : color['Dark'], 'Piece' : pieces['None']},

字典A1描述了棋盘上的正方形,并且具有文件的参数和正方形的等级,颜色以及它上面的部分。目前所有值都引用类似于_file的元组。这些部分使用相同的系统来描述它们的位置和内容。

我希望能够编写一些代码来更改字典中值的元组索引,使其看起来像这样:

 A1 = {'File' : _file[1], 'Rank' : _rank[0],
'Color' : color['Dark'], 'Piece' : pieces['None']},

但到目前为止我所尝试的所有内容都在_file [0]引用的字符串'A'的索引上运行。例如,

print (A1['File'][1])

给我们一个错误,指数超出范围,因为我们真的这么说:

print (_file[0][1]) # which means this:
print 'A'[1] 

当然,一个字母的字符串在[1]处没有索引。

为了简单起见,我可能最终会废弃这种方法并使用整数而不是元组,但是如果我能让它工作它会更容易阅读(我想。)是否有任何方法可以操作嵌套元组的索引?

2 个答案:

答案 0 :(得分:1)

字典包含对_file对象中的插槽的引用。 当您致电A1['File']时,它实际上指向_file[0]个对象。你得到了这个对象,而不是你期望的那个元组。

您可以更新dict中元组的索引值: A1['File'] = _file[1]然后当您致电A1['File']时,您将获得_file[1]。你需要保持元组的索引作为A dict的一部分,并且每当索引更新时你也会更新元组索引。

_file = ('A','B','C','D','E','F','G','H')
A1 = {'File' : _file[0], 'idx': 0}

def move_up(d):
    d['idx'] += 1
    d['File'] = _file[d['idx']]

输出

>>> A1
{'idx': 0, 'File': 'A'}
>>> move_up(A1)
>>> A1
{'idx': 1, 'File': 'B'}

答案 1 :(得分:1)

如果要更改字典中File的值,则需要使用新索引重新分配它,例如:

_file = ('A','B','C','D','E','F','G','H')
A1 = {'File' : _file[0], 'Rank' : _rank[0],
'Color' : color['Dark'], 'Piece' : pieces['None']},
# _file[0] will be replaced with 'A' in the above dicitonary

A1['File'] = _file[1]

# now it will be 'B' instead