[英]Iterating through an ordered dictionary as if it were a list
我有這個命令字典:
numerals = collections.OrderedDict([('I', 1),('V', 5),('X', 10),('L', 50),
('C', 100),('D', 500),('M', 1000)])
我想編寫一個為數字創建規則的函數,即只能從“ V”和“ X”中減去“ I”,只能從“ L”,“ C”和“ C”中減去“ X” '只能從'D'和'M'中減去。 如果是列表,我可以做一個簡單的規則,即可以從列表的兩個連續元素中減去索引為偶數的元素。 但是,由於字典沒有被索引,所以我不確定該如何處理。 是否有使用列表創建規則但使用字典的等效方法?
您可以在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
然后,您將使用生成的索引值來區分偶數索引處的鍵值對與奇數索引處的鍵值對。
它效率不高,但是您可以創建一個映射函數,如圖所示,以實時查找隨機索引。 如果您要做很多事情,可以對其進行優化, rev_map
每次調用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.