将标题的文本文件读入字典

时间:2019-02-03 05:27:35

标签: python python-3.x dictionary

我有这个目的地的文本文件,我需要将它们阅读到字典中,然后根据出发地和目的地进行排序。

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' ........}}

主要思想是起点在左侧,目的地在右侧。将目的地分组到每个起点。

3 个答案:

答案 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 place对>