2016-10-28 80 views
1

如何从文本文件创建词典?我不希望文本文件本身有任何特殊之处,因为我想直接从Python编写文件。从文本文件创建词典

文本文件:

Soda $2 Burger $5 Shake $4 Fries $3 

代码:

file = 'file.dat' 
filer = open(file, "r") 
food = {} 
for i in filer: 
    x = i.split(" ") 
    for i in range(len(x)): 
     if i %2 == 0: 
      a = x[i] 
     else: 
      b = x[i] 
     food[a] = b 
+0

哦,拍它的作品! – Indigo2003

+0

文件是否必须格式化? –

+0

最好,是的。但我可以改变它。我只是希望它很简单,因为我稍后会写信给它。 – Indigo2003

回答

1

Oh shoot it works!

不,它不应该。它应该给你一个“NameError:name'b'未定义”的消息。如果设置了'a',那么当发生food[a] = [b]时,'b'或者未设置或者从先前的对照中遗留下来。解决这个更Python的方式可能是:

file_name = 'file.dat' 

food = {} 

with open(file_name) as file: 
    for line in file: 
     pairs = line.split() 
     food.update(zip(pairs[0::2], pairs[1::2])) 

产生

{'Shake': '$4', 'Fries': '$3', 'Soda': '$2', 'Burger': '$5'} 
+0

谢谢! 'with'语句的作用是什么? “zip”是做什么的?和“双”?和'::'?请解释你的答案。我是一个python noob。 – Indigo2003

+0

它也适用于我,因为我已经定义了 – Indigo2003

+0

@ Indigo2003,'with'语句是调用对象(文件)清理代码的OOP操作符 - 即它在文件上调用close()时该块被退出,所以我们不必记得这样做。 'pairs'就是我的变量的名称,并且是任意的。 'zip()'需要两个列表并交织它们,就像衣服拉链一样。 '[x :: y]'符号是一个片段,其中'pairs [0 :: 2]'是偶数元素,'pairs [1 :: 2]'是奇数元素。 – cdlane

0

如果你控制的格式,你应该只使用JSON

import json 

d = {'Shake': '$4', 'Fries': '$3', 'Soda': '$2', 'Burger': '$5'} 
with open('file.dat', 'w') as f: 
    json.dump(d, f) 

with open('file.dat', 'r') as f: 
    print json.load(f) 
+0

什么是'with'和'as'和'load' – Indigo2003

+0

''和'as'是* context manager *的语法。这是打开文件以确保它们正确关闭的首选方式。 'json.load'和'json.dump'将读取并保存python对象(例如列表,字典)作为json文件。它记录在[这里](https://docs.python.org/2/library/json.html#json.load)。 –