我有这个有序词典:
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'。 如果它是一个列表,我可以做一个简单的规则,即可以从列表的两个连续元素中减去具有偶数索引的元素。但是,由于字典没有被编入索引,我不确定如何处理这个问题。是否有使用列表制作该规则的等效方法,而是使用字典?
答案 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