Python, bir işlevden döndürülen sözlüklerin bir listesini kullan

Aug 19 2020

Sözlüklerin listesini döndürmeye ve ardından onu işlevin dışında kullanmaya çalışıyorum:

 def myfunc():
     fileName: some file on my system
     with open(fileName) as csv1:
         dataDict = csv.DictReader(csv1, delimiter=',')

         return dataDict    

Ancak t işlevini çağırdığımda, "ValueError: Kapalı dosyada G / Ç işlemi" hatası alıyorum.

myDict = myfunc()

for row in myDict:
    print(row)

Bir sözlük listesini nasıl beyan etmeli ve kullanmalıyım? Sözlük döndürüldüğünde, alan adlarına da erişmem gerekiyor. Herhangi bir ipucu veya yardım çok takdir edilmektedir.

Yanıtlar

1 snakecharmerb Aug 19 2020 at 00:13

withİfadesi otomatik olarak dosyayı kapatır. DictReader aracılığıyla verilere ifadenin dışında erişmeye çalıştığınızda, DictReader withkapalı dosyaya erişemez ve böylece IOError'ı alırsınız.

İşlevden dönmeden önce dosyadaki satırları bir liste halinde toplayarak bunu aşabilirsiniz:

 def myfunc():
     fileName: some file on my system
     with open(fileName) as csv1:
         dataDict = csv.DictReader(csv1, delimiter=',')
         list_of_dicts = list(datadict)
         return list_of_dicts
1 superbrain Aug 18 2020 at 23:50

DictReader tembeldir. Aslında onu bir listeye dönüştürün ve onu geri döndürün, böylece dosya hala açıkken okunur.

def myfunc():
     fileName: some file on my system
     with open(fileName) as csv:
         return list(csv.DictReader(csv, delimiter=','))
1 Oin Aug 18 2020 at 23:46

Onu başka bir değişkene kopyalayıp geri döndürebilirsiniz ...

 def myfunc():
     fileName: some file on my system
     mydict = {}
     with open(fileName) as f: 
         for row in csv.DictReader(f, delimiter=','):
             mydict[row['first_column']] = row['second_column'] + row['third_column']

     return mydict  

sütun adlarını csv içindekilerle değiştirin.