从 python 中的成对字典键创建作者图作为边列表
Create a graph of authors as edge list from paired dictionary keys in python
我正在尝试在 python 中为合着图创建一个邻接表。
我创建了一个字典 pf author
{'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]
有什么想法吗?
您可以将 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.7
向上保证字典的插入顺序
CPython 3.6
上有实现的插入顺序 detail/sideeffect
- 或使用 OrderedDict
开头(或使用 keys = sorted(d.keys())
)
dict插入顺序,阅读资料@
我正在尝试在 python 中为合着图创建一个邻接表。 我创建了一个字典 pf author
{'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]
有什么想法吗?
您可以将 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.7
向上保证字典的插入顺序CPython 3.6
上有实现的插入顺序 detail/sideeffect- 或使用 OrderedDict
开头(或使用 keys = sorted(d.keys())
)
dict插入顺序,阅读资料@