Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将文件中的第一行作为键读取,并将接下来的3行作为值列表读取到字典中,python_Python_File_Dictionary_File Read - Fatal编程技术网

如何将文件中的第一行作为键读取,并将接下来的3行作为值列表读取到字典中,python

如何将文件中的第一行作为键读取,并将接下来的3行作为值列表读取到字典中,python,python,file,dictionary,file-read,Python,File,Dictionary,File Read,我正在尝试读取一个如下所示的txt: Animals Dog Cat Bird Cities Paris London Chicago 查字典。(第一行插入一个键,然后是三行值,依此类推)它应该是这样的: {"Animals":["Dog","Cat","Bird"],"Cities":["Paris","London","Chicago"] f = open('first.txt').readlines() f = [i.strip('\n') for i in f] datafile =

我正在尝试读取一个如下所示的
txt

Animals
Dog
Cat
Bird
Cities
Paris
London
Chicago
查字典。(第一行插入一个键,然后是三行值,依此类推)它应该是这样的:

{"Animals":["Dog","Cat","Bird"],"Cities":["Paris","London","Chicago"]
f = open('first.txt').readlines()
f = [i.strip('\n') for i in f]
datafile = [i.split() for i in f]


dct = {}


for i in range(len(datafile)):

    if i%4 == 0:

        new_lst = datafile[i+1:i+4]

        final_list = [b[0] for b in new_lst]

        print datafile[i][0]
        dct[datafile[i][0]] = final_list




print dct
请帮帮我

这应该有效:

ind = 0
my_dict = {}
my_list = []
for line in myfile:
    val = line.rstrip().split()[0]
    ind += 1
    if ind % 5 == 0:
        my_list = []
    if ind % 4 == 1:
        x = val
    else:
        my_list.append(val)

    if ind % 4 == 0:
            my_dict[x] = my_list

print(my_dict)

下面是一个使用
islice
的解决方案,它可以帮助您选择要从文件中读取的下n行

from itertools import islice

dic = {}

with open('file.txt', 'r') as f:
    while True:
        lines = list(islice(f, 4))
        lines = map(str.rstrip, lines)
        if not lines:
            break
        dic[lines[0]] = lines[1:]

print dic
这将提供您需要的结果:

{‘城市’:[‘巴黎’、‘伦敦’、‘芝加哥’]、‘动物’:[‘狗’、‘猫’、‘鸟’}


更多关于

的信息,请尝试以下内容:

{"Animals":["Dog","Cat","Bird"],"Cities":["Paris","London","Chicago"]
f = open('first.txt').readlines()
f = [i.strip('\n') for i in f]
datafile = [i.split() for i in f]


dct = {}


for i in range(len(datafile)):

    if i%4 == 0:

        new_lst = datafile[i+1:i+4]

        final_list = [b[0] for b in new_lst]

        print datafile[i][0]
        dct[datafile[i][0]] = final_list




print dct

以下是另一种可能的解决方案:

fin = open(f, 'rb')

lines = [word.strip('\n') for word in fin.readlines()]

keys = [word.strip('\n') for idx, word in enumerate(fin.readlines()) if idx%4 == 0]

values = [lines[idx+1:idx+4] for idx, _ in enumerate(lines) if idx%4 == 0]

d = dict(zip(keys, values))

{'Animals': ['Dog', 'Cat', 'Bird'], 'Cities': ['Paris', 'London', 'Chicago']} 

你试过什么?在你的尝试中什么让你困惑?你已经有一些代码了吗?我们不介意在您陷入困境时提供帮助,但我们通常不喜欢编写您的整个程序!您的数据是否总是按特定类型和三个对应值成对排序?这是一个完全合理的解决方案,以及下面的其他解决方案。那个选民能解释他的动机吗?这里也是!至少他们应该指出你和我的解决方案的问题。我也要投你的票。谢谢。你为什么不干脆
{line.strip():[s.strip()代表岛上的s(f,3)]代表岛上的行}
?没想到!谢谢你的提示!你也可以
stripped=map(str.strip,f);d={line:list(islice(stripped,3)),用于stripped}
中的line,这将删除strip调用,假设python3,它可能会快一点。您还可以在自己的代码中使用
map(str.rstrip,lines)
删除丑陋的lambda;)现在好多了!谢谢