זה נושא דיון מלווה לערך המקורי ב- https://www.tocode.co.il/bundles/python/lessons/14-dictionaries
זה נושא דיון מלווה לערך המקורי ב- 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
הי,
לגבי 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)
התרגיל לא רץ לי ואני לא מוצאת סיבה אשמח לקבל עזרה
הי מיכל,
מה הודעת השגיאה שאת מקבלת?