簡體   English   中英

用分數從字典創建有向圖

[英]Creating directed graph from dictionary with scores

我有這本字典:

d1={
'a':['b','c','b'],
'b':['a','d','e']
}

它是一種有向圖。 例如,d1 ['a']兩次指向'b',一次指向'c'(請參見下圖)

在此處輸入圖片說明

我要從d1中創建兩個字典-pointing_to和pointed_by,其值分別描述它們指向或指向的次數。

pointing_to={
'a':{'b':2,'c':1},
'b':{'a':1,'d':1,'e':1},
}

pointed_by={
'a':{'b':1},
'b':{'a':2},
'c':{'a':1},
'd':{'b':1},
'e':{'b':1}
}

您可以使用一些collections utils來獲得輸出:

from collections import Counter, defaultdict

d1 = {'a': ['b', 'c', 'b'], 'b': ['a', 'd', 'e']}

pointed_to = {k: Counter(v) for k, v in d1.items()}
pointed_from = defaultdict(dict)
for k, v in pointed_to.items():
    for k_, v_ in v.items():
        pointed_from[k_][k] = v_

# pointed_to
{'a': Counter({'b': 2, 'c': 1}), 
 'b': Counter({'d': 1, 'a': 1, 'e': 1})}

# pointed_from
defaultdict(<class 'dict'>, {'d': {'b': 1}, 
                             'a': {'b': 1}, 
                             'c': {'a': 1}, 
                             'b': {'a': 2}, 
                             'e': {'b': 1}})

請注意, Counterdeafultdict都是dict子類,因此,就所有意圖和目的而言,這兩個都可以用作所需的輸出dict。

如果您確實想要dict對象,則可以輕松實現:

pointed_to = {k: dict(v) for k, v in pointed_to.items()}
pointed_from = dict(pointed_from)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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