我有一個使用元組作為鍵的字典。鍵是指圖上兩個節點之間的邊,例如。“vendor連接到account”,關聯的值就是連接的強度('vendor','account'): 7。我需要能夠以兩種方式從字典中獲取值:a)通過傳入元組中元素的順序很重要的鍵 b)元組的順序不重要的地方。不同之處在于,有時連接的方向很重要,有時則不重要。(在圖形方面,有時我認為圖形是有向的,有時是無向的。)請注意,沒有重復的元組對,例如。(vendor,account) - (account,vendor)所以這讓事情變得更容易。
我想出了一種接受元組并將其與正確鍵匹配的方法,而不管順序如何。不幸的是,這意味著每次都要回圈遍歷所有鍵。我只是想知道是否有更好的方法?
v_dict = {('vendor', 'account'):1,
('vendor', 'cost_center'):2,
('vendor', 'purchase_order'):3,
('vendor', 'user_name'):5,
('vendor', 'invoice'):6}
pair = [('purchase_order', 'vendor'), ('invoice','vendor'), ('vendor', 'user_name')]
key = []
[key.append(j) for j in v_dict.keys() for i in pair if i[0] in j and i[1] in j]
for key in key:
print(key, v_dict[key])
注意:我知道并使用專用圖形庫。在這種情況下,我必須只使用 python。
uj5u.com熱心網友回復:
我看到兩種方法:
在嘗試將元組用作索引之前對其進行排序。這樣,您獲取元組的順序無關緊要。
v_dict = {('vendor', 'account'):1, ('vendor', 'cost_center'):2, ('vendor', 'purchase_order'):3, ('vendor', 'user_name'):5, ('vendor', 'invoice'):6} v_dict = {tuple(sorted(k)): v for k, v in v_dict.items()} def get_vdict_value(key): return v_dict.get(tuple(sorted(key)))使用
frozenset您的元組中的一個作為您的密鑰。v_dict = {frozenset(k): v for k, v in v_dict.items()} def get_vdict_value(key): return v_dict.get(frozenset(key))
在從字典中獲取密鑰之前,使用我們剛剛定義的函式來修復密鑰。
pairs = [('purchase_order', 'vendor'), ('invoice','vendor'), ('vendor', 'user_name')]
for pair in pairs:
print(pair, get_vdict_value(pair))
# ('purchase_order', 'vendor') 3
# ('invoice', 'vendor') 6
# ('vendor', 'user_name') 5
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/471985.html
標籤:python-3.x 字典 图论
