从python中成对的字典键创建一个作者图作为边列表

2024-06-16 09:04:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在python中为合著图创建一个邻接列表。 我为作者编了一本词典

{'a1': ' A-ming Hao',
 'a2': ' Qing-zhen Wang',
 'a3': ' Xiao-long Li',
 'a4': ' Ming-da Zhai'}

我用这种方法创造了边缘。你知道吗

g=nx.Graph()    

g.add_edge(y[0]['a1'],y[0]['a2'])
g.add_edge(y[0]['a2'],y[0]['a3'])
g.add_edge(y[0]['a3'],y[0]['a4'])
g.add_edge(y[0]['a4'],y[0]['a1'])

但我想用for循环

for key,val in (y[0].items()):
    g.add_edge(y[0][key],y[0][key])

我希望这个循环遍历每个键。 像这样创造边缘

g.add_edge(y[0][key],y[0][key+1])

这样就可以在key[a1]key[a2],之间创建边。 在我的for循环中,它实际上是key[a1]key[a1]之间的边。你知道吗

当它到达最后一个key[a4]时,首先连接它key[a1]

你知道吗?你知道吗


Tags: keyadda2列表fora1作者a3
1条回答
网友
1楼 · 发布于 2024-06-16 09:04:35

您可以将dict.keys()上的列表切片与zip()结合使用,以将元组放入图形中:

authors = {'a1': ' A-ming Hao',
           'a2': ' Qing-zhen Wang',
           'a3': ' Xiao-long Li',
           'a4': ' Ming-da Zhai'}

keys = list(authors .keys())

# zip keys with itself - rotated by 1 element
tups = list(zip(keys, keys[1:]+keys[0:1]))

print(tups)

输出:

[('a1', 'a2'), ('a2', 'a3'), ('a3', 'a4'), ('a4', 'a1')]

使用这些元组,您可以执行以下操作:

g = nx.Graph()
for a,b in tups:
    g.add_edge(authors[a], authors[b])

请记住,键的显示顺序可能会有所不同-如果需要确保插入顺序,则需要使用:

  • python 3.7up保证dict的插入顺序
  • CPython 3.6up按实现细节/副作用具有插入顺序
  • 或者使用OrderedDict

开始(或使用keys = sorted(d.keys())


对于dict插入顺序,读取信息@Are dictionaries ordered in Python 3.6+?

相关问题 更多 >