我希望将值附加到我的字典中,当它们存在于我的文件中的某个键下时。如果密钥已存在于字典中。否则我想用它的值创建密钥。 E.g:
f=open('Fruits.txt','r')
for line in f:
field=line.split('\t')
fruits={}
if 'Gala' in field[4] and 'Apples' in fruits.keys():
print 'Cider'
fruits['Apples'].append('Gala')
elif 'Gala' in field[4]:
fruits['Apples']='Gala'
print fruits.keys()
f.close
当我运行此脚本时。我没有收到任何错误消息,但是没有打印出“Cider”,表示“苹果”键未被识别出来在水果词典中。与此同时,print fruits.keys()为每行打印:
[ '苹果']
然而,当我在打印fruits.keys()之前删除(全部)缩进时,它会打印:
[]
你知道为什么'苹果'键被遗忘和/或不被识别?
提前谢谢!
答案 0 :(得分:0)
您的示例中有几个问题:
for line in f:
field=line.split('\t')
fruits={}
您应该在循环之前初始化fruits
字典。否则你会得到每一行的新词典。
<小时/>
fruits['Apples'].append('Gala')
在第一次迭代中,这保证会引发KeyError
。您的字典为空,但您认为它已经将Apples
作为键,将空列表作为值。在尝试append
之前,您应该先验证一下,或者更好,然后使用defaultdict来节省您的喧嚣。
<小时/>
f.close
close
是一个函数,因此该行应为f.close()
。
总结一下:
from collections import defaultdict
f = open('Fruits.txt','r')
fruits = defaultdict(list)
for line in f:
field=line.split('\t')
if 'Gala' in field[4] and 'Apples' in fruits.keys():
print 'Cider'
fruits['Apples'].append('Gala')
elif 'Gala' in field[4]:
fruits['Apples']='Gala' # This line will change the value to a string
# so you won't be able to "append" to it anymore.
# I'm not sure what you tried to do here.
print fruits.keys()
f.close()
甚至更好,使用with
为您处理文件的打开和关闭:
from collections import defaultdict
fruits = defaultdict(list)
with open('Fruits.txt','r') as f:
for line in f:
field = line.split('\t')
if 'Gala' in field[4] and 'Apples' in fruits.keys():
print 'Cider'
fruits['Apples'].append('Gala')
elif 'Gala' in field[4]:
fruits['Apples'] = 'Gala'
print fruits.keys()
答案 1 :(得分:0)
你的问题需要清楚你在哪里获得关键和价值观? 以下是示例,但您应根据您的问题选择密钥和值:
试试这个:
f=open('Fruits.txt','r')
fruits= defaultdict(list)
for line in f:
field=line.split('\t')
fruits['Apples'].append('Gala')
f.close