קורס Python 3 שיעור מילונים ב Python


זה נושא דיון מלווה לערך המקורי ב- https://www.tocode.co.il/bundles/python/lessons/14-dictionaries

הקוד שלי עם:

  • הגישה הראשונה בה נקטתי כדי לספור קבצים לפי סיומות.
  • הדוגמה מהפרק משולבת עם:
    • שימוש ב-Counter.
    • שימוש ב-defaultdict.
import glob
import os.path
from collections import Counter, defaultdict

all_files_with_extensions = glob.glob('*.*')
print(f'{"all_files:":15}', all_files_with_extensions)

files_by_ext = {}
for cur_file in all_files_with_extensions:
    base, ext = os.path.splitext(cur_file)
    if ext not in files_by_ext:
        files_by_ext[ext] = []
    files_by_ext[ext].append(base)
print(f'{"files_by_ext:":15}', files_by_ext)

ext_length = {
    key: len(val) for key, val in files_by_ext.items()  # if key != ''
}
print(f'{"my ext_length:":15}', ext_length)

ynon_counter = {}
py_counter = Counter()
py_defaultdict = defaultdict(int)
for filename in all_files_with_extensions:
    _, ext = os.path.splitext(filename)
    py_counter[ext] += 1
    py_defaultdict[ext] += 1
    try:
        ynon_counter[ext] += 1
    except KeyError:
        ynon_counter[ext] = 1
print(f'{"ynon_counter:":15}', ynon_counter)
print(f'{"py_counter:":15}', dict(py_counter))
print(f'{"py_defaultdict:":15}', dict(py_defaultdict))

פלט:

all_files:      ['01-intro.py', '7boom.py', 'ap.py', 'biggest.py', 'bla.txt', 'bogus.txt', 'cursesmenu.py', 'demo1.py', 'demo2.py', 'ex11-syntax-lab.py', 'files_in_dir.py', 'loops.py']
files_by_ext:   {'.py': ['01-intro', '7boom', 'ap', 'biggest', 'cursesmenu', 'demo1', 'demo2', 'ex11-syntax-lab', 'files_in_dir', 'loops'], '.txt': ['bla', 'bogus']}
my ext_length:  {'.py': 10, '.txt': 2}
yanon_counter:  {'.py': 10, '.txt': 2}
py_counter:     {'.py': 10, '.txt': 2}
py_defaultdict: {'.py': 10, '.txt': 2}

Process finished with exit code 0

היי @ynonp, עכשיו כשהחג מאחורנו אשמח לקבל ממך משוב.

הי,

לגבי Counter אני חושב שאפשר לקצר קצת דרכים. נסה להריץ את זה ותראה מה אתה מקבל:

c = Counter()
c.update(['one', 'one', 'one', 'two', 'two'])
print(c)

אחרי זה תראה איך אפשר להשתמש ב Counter כדי לספור סיומות גם בלי הלולאה

האם זה נחשב בלי לולאות (כי list comprehension זה סוג של לולאה)?

import glob
import os.path
from collections import Counter

all_files = glob.glob('*.*')
py_counter = Counter()
py_counter.update([os.path.splitext(file_name)[1] for file_name in all_files])
print(py_counter)
לייק 1
import glob
import os.path
all_files=glob.glob('*.py')
print(all_files)
base, ext= os.path.splitext('*.py')
print(base)
print(ext)
cuonter={}
for filesname in all_files:
      _ ,ext=os.path.splitext(filesname)
   try:
     cuonter[ext] +=1
   except KeyError:
     cuonter[ext]=1
print(cuonter)

התרגיל לא רץ לי ואני לא מוצאת סיבה אשמח לקבל עזרה

הי מיכל,

מה הודעת השגיאה שאת מקבלת?