簡體   English   中英

dict.keys()中的鍵無法附加值

[英]Key in dict.keys() not recognized for appending values

當值存在於文件中某個鍵下時,我想將值追加到字典中。 如果密鑰已經存在於字典中。 否則,我想用它的值創建密鑰。 例如:

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',表明'Apples'鍵在水果字典中未被識別。 在此期間,printfruit.keys()會為每行打印:

['蘋果']

但是,當我在打印fruit.keys()之前刪除(全部)縮進時,將打印:

[]

您知道為什么忘記和/或不識別“蘋果”密鑰嗎?

先感謝您!

您的示例中有幾個問題:

for line in f:
    field=line.split('\t')
    fruits={}

您應該在循環之前初始化fruits字典。 否則,您將獲得每一行的新字典。


fruits['Apples'].append('Gala')

在第一次迭代中,這KeyError會引發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()

您的任務需要弄清楚鍵和值在哪里? 下面是示例,但是您應該根據自己的問題選擇鍵和值:

嘗試這個:

f=open('Fruits.txt','r')
fruits= defaultdict(list)
for line in f:
    field=line.split('\t')
    fruits['Apples'].append('Gala') 
f.close

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM