Ale*_*tin 5 python list networkx python-3.x
目前我有一个清单:
[['???? ????', 10, '????'],
['???? ????', 10, '????', 5, '?????'],
['???? ????', 10, '????', 3, '?????'],
['???? ????', 10, '????', 3, '?????', 1, '??????']]
Run Code Online (Sandbox Code Playgroud)
我需要以某种方式将其转换为Networkx边缘,其中单词对应该成为图形的节点,并且成为权重之间的整数:
G = nx.Graph()
G.add_edge('???? ????', '????', weight=10)
G.add_edge('????', '?????', weight=5)
G.add_edge('????', '?????', weight=3)
G.add_edge('?????', '??????', weight=1)
Run Code Online (Sandbox Code Playgroud)
目前我被困,没有想法.任何帮助,将不胜感激!
由于您有重复的信息,我建议首先创建一个字典以确保唯一性。我添加了一项检查,以确保重复元素的距离不会发生冲突。
\n\nIn [1]:\ndistances = {}\nfor row in l:\n for i in range(0, len(row)-1, 2):\n key_tuple = (row[i], row[i+2])\n d = row[i+1]\n if key_tuple in distances.keys():\n if distances[key_tuple] != d:\n print("Warning: Found a conflicting distance for {}: {} and "\n "{}. Using last".format(key_tuple, distances[key_tuple], d))\n distances[key_tuple] = d\n\nIn [2]: distances\nOut[2]:\n {(\'\xd0\x9c\xd0\xb0\xd0\xbc\xd0\xb0 \xd0\xbc\xd1\x8b\xd1\x82\xd1\x8c\', \'\xd1\x80\xd0\xb0\xd0\xbc\xd0\xb0\'): 10,\n (\'\xd1\x80\xd0\xb0\xd0\xbc\xd0\xb0\', \'\xd0\xb4\xd0\xbe\xd0\xbb\xd0\xb3\xd0\xbe\'): 5,\n (\'\xd1\x80\xd0\xb0\xd0\xbc\xd0\xb0\', \'\xd0\xb2\xd1\x87\xd0\xb5\xd1\x80\xd0\xb0\'): 3,\n (\'\xd0\xb2\xd1\x87\xd0\xb5\xd1\x80\xd0\xb0\', \'\xd0\xbf\xd0\xbe\xd0\xb7\xd0\xb4\xd0\xbd\xd0\xbe\'): 1}\nRun Code Online (Sandbox Code Playgroud)\n\n然后您可以使用该字典创建边缘。
\n\nIn [3]:\nimport networkx as nx\nG = nx.Graph()\nfor k, v in distances.items():\n G.add_edge(k[0], k[1], weight=v)\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
294 次 |
| 最近记录: |