键入dict.keys()无法识别附加值

时间:2016-11-07 10:00:35

标签: python dictionary append key

我希望将值附加到我的字典中,当它们存在于我的文件中的某个键下时。如果密钥已存在于字典中。否则我想用它的值创建密钥。 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()之前删除(全部)缩进时,它会打印:

[]

你知道为什么'苹果'键被遗忘和/或不被识别?

提前谢谢!

2 个答案:

答案 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