2011-11-09 162 views
0

我从文件中读取数据这样的检索单个项目:如何从嵌套的字典在python

{"day" :"Monday", "alarm":"on", "kids":"School" , "work":"days"} 
{"day" :"Tuesday", "alarm":"on", "kids":"School" , "work":"days"} 
{"day" :"Wednesday", "alarm":"on", "kids":"School" , "work":"days"} 
{"day" :"Thursday", "alarm":"on", "kids":"School" , "work":"nights"} 
{"day" :"Friday", "alarm":"on", "kids":"School" , "work":"nights"} 
{"day" :"Saturday", "alarm":"off", "kids":"Dance" , "work":"overtime"} 
{"day" :"Sunday", "alarm":"off", "kids":"Soccer" , "work":"off"} 

我将数据放入一个字典,然后评估该词典的一些条件和配售该字典到另一个字典,像这样:

import ast 
o=open('schedule.txt','rb') 
day_={} 
for lines in o: 
    dict_={} 
    dict_= ast.literal_eval(lines) 
    if dict_['day']=='Monday': 
     day_['1']=dict_.items() 
    elif dict_['day']=='Tuesday': 
     day_['2']=dict_.items() 
    elif dict_['day']=='Wednesday': 
     day_['3']=dict_.items() 
    elif dict_['day']=='Thursday': 
     day_['4']=dict_.items() 
    elif dict_['day']=='Friday': 
     day_['5']=dict_.items() 
    elif dict_['day']=='Saturday': 
     day_['6']=dict_.items() 
    elif dict_['day']=='Sunday': 
     day_['7']=dict_.items() 
    else: 
     print('there was an error') 
o.close() 
print day_.items() 
#this seems to work properly 

现在,如果我只是想找出孩子们正在做的第4天,我该怎么办呢? 或者是否有一种更简单的方法来保存数据以供将来在程序中参考?

+0

意识到'dict_.items()'是一个列表不是字典。现在我改变了它,所以我将它存储为一个字典而不是列表,它似乎正在使用@Sven Marnach的解决方案的一部分在 – Scott

回答

2

通过使用字典将星期几名称映射到数字,可以简化代码。为了提取4天记录的"kids"项目,你可以使用result[4]["kids"]

days = {"Monday": 1, "Tuesday": 2, "Wednesday": 3, "Thursday": 4, 
     "Friday": 5, "Saturday": 6, "Sunday": 7} 
result = {} 
with open('schedule.txt', 'rb') as f: 
    for line in f: 
     d = ast.literal_eval(line) 
     result[days[d["day"]]] = d 
print result[4]["kids"] 
+1

以下@Scott:除非在“1”中有一些隐藏含义,否则“2 “,”3“......字符串,为什么不把星期几的名字留在原地?就像在''结果[“星期四”] [“孩子们”]' – digitalarbeiter

+0

我喜欢你的映射这样的日子的解决方案,但是这是一个简单的例子,我一直在用来测试和处理一个不同的问题一个天气脚本,我没有这样的地图。在天气脚本中,我使用的是日期而不是数字,我希望能够获得特定日期的信息。以同样的方式工作,但这只是简化。 – Scott

+0

OP中还有一个拼写错误:Wedensday –