通过有序字典迭代,就像它是一个列表一样

时间:2016-12-12 20:37:59

标签: python dictionary

我有这个有序词典:

numerals = collections.OrderedDict([('I', 1),('V', 5),('X', 10),('L', 50),
                                    ('C', 100),('D', 500),('M', 1000)])

我想编写一个创建数字规则的函数,即“我”。只能从' V'中删除和' X',' X'只能从' L'中删除和' C'和' C'只能从' D'中删除和' M'。 如果它是一个列表,我可以做一个简单的规则,即可以从列表的两个连续元素中减去具有偶数索引的元素。但是,由于字典没有被编入索引,我不确定如何处理这个问题。是否有使用列表制作该规则的等效方法,而是使用字典?

2 个答案:

答案 0 :(得分:0)

您可以在OrdereDdict上调用enumerate为字典中的每个键值对生成索引:

>>> for index, key in enumerate(numerals):
...    print(index, key, numerals[key])
...
0 I 1
1 V 5
2 X 10
3 L 50
4 C 100
5 D 500
6 M 1000 

然后,您将使用生成的索引值来区分偶数索引处的键值对与奇数索引处的键值对。

答案 1 :(得分:0)

效率有点低,但您可以创建一个映射函数,如图所示即时查找随机索引。如果您要做很​​多事情,可以对其进行优化,以便每次调用时都不会重新创建rev_map

import collections

numerals = collections.OrderedDict([('I', 1),('V', 5),('X', 10),('L', 50),
                                    ('C', 100),('D', 500),('M', 1000)])

def index_to_key(od, index):
    rev_map = {i:k for i,k in enumerate(od.keys())}
    return rev_map[index]

for i in range(len(numerals)):
    key = index_to_key(numerals, i)
    value = numerals[key]
    print('numerals[{}]: key: {!r}, value: {}'.format(i, key, value))

输出:

numerals[0]: key: 'I', value: 1
numerals[1]: key: 'V', value: 5
numerals[2]: key: 'X', value: 10
numerals[3]: key: 'L', value: 50
numerals[4]: key: 'C', value: 100
numerals[5]: key: 'D', value: 500
numerals[6]: key: 'M', value: 1000
相关问题