我有一个大型的飞行腿数据集,我想根据图表的权重是特定腿的飞行次数来构建一个图表。一条腿中涉及的城市对存储为集合列表。我无法创建计数/频率字典,因为“集合不可散列”
my_test_list = [{'DOHA', 'ROME'},{'DOHA', 'JAKARTA'},{'DOHA', 'JAKARTA'},{'DOHA', 'ROME'},{'MAURITIUS','ROME'},{'MAURITIUS', 'ROME'},{'DOHA', 'ROME'},{'DOHA', 'JAKARTA'},{'JAKARTA', 'ROME'}, {'DOHA', 'ROME'},{'NEW YORK NY', 'WASHINGTON, DC'},{'ACCRA', 'WASHINGTON, DC'}]
理想情况下,我希望有这样的输出,我可以输入 networkx:
edge_list = [('DOHA', 'ROME', {'frequency': 4}), ('DOHA', 'JAKARTA', {'frequency': 3}),('MAURITIUS', 'ROME', {'frequency': 2}), ('ROME', 'JAKARTA', {'frequency': 1}),('NEW YORK NY', 'WASHINGTON, DC', {'frequency': 1}),('ACCRA', 'WASHINGTON, DC', {'frequency': 1}) ]
这就是我所做的,看起来很可怕。
my_concat_list=[]
for item in my_test_list:
out=""
while len(item) !=0:
out=out+";"+item.pop()
my_concat_list.append(out)
my_concat_list 最终看起来像这样:
[';DOHA;ROME',
';JAKARTA;DOHA',
';JAKARTA;DOHA',
';DOHA;ROME',
';ROME;MAURITIUS',
';ROME;MAURITIUS',
';DOHA;ROME',
';JAKARTA;DOHA',
';JAKARTA;ROME',
';DOHA;ROME',
';WASHINGTON, DC;NEW YORK NY',
';ACCRA;WASHINGTON, DC']
我使用计数器来获取频率。
from collections import Counter
my_out = Counter(my_concat_list)
我得到的输出是:
Counter({';DOHA;ROME': 4,
';JAKARTA;DOHA': 3,
';ROME;MAURITIUS': 2,
';JAKARTA;ROME': 1,
';WASHINGTON, DC;NEW YORK NY': 1,
';ACCRA;WASHINGTON, DC': 1})
从这里,我可以得到我想要的最终格式:
my_final_list=[]
for item in my_out.keys():
temp_list = item.split(";")
weight = my_out[item]
my_new_tuple = (temp_list[1],temp_list[2],{'frequency':weight})
my_final_list.append(my_new_tuple)
my_final_list
这是 my_final_list 的样子:
[('DOHA', 'ROME', {'frequency': 4}),
('JAKARTA', 'DOHA', {'frequency': 3}),
('ROME', 'MAURITIUS', {'frequency': 2}),
('JAKARTA', 'ROME', {'frequency': 1}),
('WASHINGTON, DC', 'NEW YORK NY', {'frequency': 1}),
('ACCRA', 'WASHINGTON, DC', {'frequency': 1})]
但是必须有更好的方法来做到这一点。这看起来真的很笨拙。