微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从嵌套字典生成方阵?

如何解决如何从嵌套字典生成方阵?

我最近正在使用networkx模块,现在我要获取国家之间的距离数据。

因此excel原始数据如下:

Nat1   Nat2   Y/N
ABW    ANT    0
ABW    ARG    0
ABW    BEK    1
ABW    BHS    1
ABW    BRA    0
...
ALB    COL    0
ALB    CYP    1
...

感谢GeckStar(Networkx: Get the distance between nodes),我设法知道了如何将数据集编码为嵌套字典。

问题是,我对字典不熟悉。如果它是嵌套列表,我可以处理,但是嵌套字典...我需要其他人的帮助。

所以我检查了如果我编写如下代码会给我什么?

distance = dict(nx.all_pairs_shortest_path_length(graph))
df = pd.DataFrame(list(distance.items()))
df.to_excel("C_C.xlsx")

(仅供参考,

distance = dict(nx.all_pairs_shortest_path_length(graph))

将计算从一个国家到另一个国家的最短路径。因此,如果一个国家没有与另一个国家建立联系,并且需要绕道而行,那么它的价值将大于1。)

当然,进展并不顺利。

     0    1
0   ABW   {'ABW':0,'ANT': 1 ...,'BHS': 2 ...}
1   ANT   {'ANT':0,'ABW': 1 ...}
...
3   BEL   {'BEL':0,'ABW':1,... 'BHS':4,...}
...

但是我知道应该有一种方法可以将这些数据制作成像这样的方矩阵:

    ABW   ANT   ARG    BEL    BHS ...
ABW  0     0     0      1      2 ...
ANT  0     0     1      0      1  ...
ARG  0     1     0      1      0  ...
BEL  2     0     1      0      4  ...
...

请问能给我启发吗? 感谢您抽出宝贵时间来检查此问题,也感谢您提前提出解决方案。

解决方法

我只是浏览了一个列表。

dis = dict(nx.all_pairs_shortest_path_length(graph))

Nations = list(dis.keys())
master = [[""]]

for x in Nations:
    master[0].append(x)

for Nat1 in dis:
    master.append([Nat1])
    for Nat2 in Nations:
        master[-1].append(dis[Nat1][Nat2])

感谢大家照顾这个问题。 祝你有美好的一天!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。