簡體   English   中英

遍歷有序字典,就好像它是一個列表一樣

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM