我有这个目的地的文本文件,我需要将它们阅读到字典中,然后根据出发地和目的地进行排序。
JFK MCO
ORD DEN
ORD HOU
DFW PHX
JFK ATL
ORD DFW
ORD PHX
ATL HOU
DEN PHX
PHX LAX
JFK ORD
DEN LAS
DFW HOU
ORD ATL
LAS LAX
ATL MCO
HOU MCO
LAS PHX
STL PDX
预期结果:
{'JKF' : {'MCO', 'ATL','ORD'}, 'ORD' : {'DEN' , 'HOU' , 'DFW' , 'PHX' , 'ATL' ........}}
主要思想是起点在左侧,目的地在右侧。将目的地分组到每个起点。
答案 0 :(得分:3)
您可以遍历各行,拆分各行,然后使用dict.setdefault
将目的地存储到以原始位置为键的集合字典中。
d = {}
with open('file.txt') as file:
for line in file:
orig, dest = line.split()
d.setdefault(orig, set()).add(dest)
d
变为:
{'JFK': {'ORD', 'ATL', 'MCO'}, 'ORD': {'DEN', 'HOU', 'ATL', 'DFW', 'PHX'}, 'DFW': {'PHX', 'HOU'}, 'ATL': {'MCO', 'HOU'}, 'DEN': {'PHX', 'LAS'}, 'PHX': {'LAX'}, 'LAS': {'PHX', 'LAX'}, 'HOU': {'MCO'}, 'STL': {'PDX'}}
答案 1 :(得分:3)
使用非常基本的for循环和dictdefaultdict
即可轻松完成此操作from collections import defaultdict
d = defaultdict(set)
with open("filename.txt", "r") as f:
for line in f:
start, place = line.split()
d[start].add(place)
也可以使用csv模块
来完成from collections import defaultdict
import csv
d = defaultdict(set)
with open("filename.txt", "r") as f:
r = csv.reader(f, delimiter=' ')
for start, place in r: d[start].add(place)
当然,这会产生一个defaultdict
,尽管如果您想在使用d
之后使d = dict(d)
成为真正的字典,则仍然可以将它与字典相同使用。 / p>
答案 2 :(得分:1)
尝试
depart_place = ['JFK', 'ORD', 'ORD', 'DFW', 'JFK']
destination = ['MCO', 'DEN', 'HOU', 'PHX', 'ATL']
place_dict = {}
for place, dest in zip(depart_place, destination):
if place in place_dict:
place_dict[place].add(dest)
else:
place_dict[place] = {dest}
因此,从本质上讲,我们正在遍历(place, dest)
产生的出发地和目的地zip(depart_place, destination)
的元组。然后,检查place
是否已在字典中,是否将destination
附加到字典中,否则,我们为key-value