阅读标题的文本文件导入词典

问题描述 投票:1回答:3

我有目的地这个文本文件,我需要将它们读入一个字典,并根据出发地和目的地它们整理出来。

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

其主要思路是,起点在左边和目标是正确的。集团的目标到每个起点。

python python-3.x dictionary
3个回答
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'}}

3
投票

这样做是非常容易使用循环和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)一个真正的字典。


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-valueplace

© www.soinside.com 2019 - 2024. All rights reserved.