برنامه نویسی

بهترین گزینه برای PPRINT: معرفی SetPrint برای قالب بندی داده های پایتون بهتر

مسائلی با ابزارهای قالب بندی موجود

هنگام کار با ساختارهای داده مانند لیست ها یا آرایه های numpy در پایتون ،

استاندارد print یا pprint، یا حتی ابزارهای خارجی مانند rich، اغلب در ارائه نمای روشنی از کل ساختار ،

مخصوصاً هنگام برخورد با آرایه های چند بعدی یا داده های عمیق تو در تو، از دست دادن پیگیری کدام عنصر با کدام یک آسان است.

بیایید مثال زیر را به عنوان یک تصویر در نظر بگیریم.


📋 مثال آرایه 1

sample = [
    {"user": {"id": 1, "name": "Alice", "scores": [95, 88, 76]}},
    {"user": {"id": "002b", "name": "Bob", "scores": [72, 85, 90]}},
    {"bug_user": {"id": [3], "name": "Charlie", "scores": [100, [50, 40], 70]}},
]
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

❓ چرا خواندن آن سخت می شود؟
– “مشکلات” ساختارهای داده

لیست های پایتون ، فرهنگ لغت ها و آرایه های Numpy خوب است که برای ساختارهای ساده کار کنند.

با این حال ، با لانه سازی کمی پیچیده تر یا

ساختارهایی که در چندین جهت پخش می شوندبا

به سرعت می توان گفت که هر عنصر کجاست یا با آن مطابقت دارد.


دلایل معمولی برای خوانایی ضعیف:

  • طول رشته های مختلف باعث سوء استفاده و شکستن خط می شود
  • لیست های داخل فرهنگ لغت ها و فرهنگ لغت ها در داخل لیست ها …
  • سیاهههای مربوط به عمق در جهت عمودی
  • داده هایی که به صورت افقی پخش می شوند ، مانند جداول یا داده های تصویر
  • ساختارهای سلسله مراتبی نامنظم

به عبارت دیگر ، به دلیل تفاوت ساختاری وت تغییرات در طول رشتهبا

شما در نهایت با موقعیت های نادرست یا شکست خط برای اطلاعاتی که باید تراز شود.

👇 آیا این به نظر می رسد برای داده هایی که معمولاً با آنها کار می کنید؟

سعی کنید آرایه مثال را در بالا اجرا کنید pprint:

[{'user': {'id': 1, 'name': 'Alice', 'scores': [95, 88, 76]}},
 {'user': {'id': '002b', 'name': 'Bob', 'scores': [72, 85, 90]}},
 {'bug_user': {'id': [3], 'name': 'Charlie', 'scores': [100, [50, 40], 70]}}]
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید


SetPrint: ابزاری که بهتر از آن است pprint

در حالی که pprint مبارزات با آرایه های چند بعدی و داده های عمیق تو در تو ، setprint به راحتی این را برای شما تجسم می کند.
بیایید مقایسه کنیم setprint همان داده ها را کنترل می کند.

با استفاده از setprint با گسترش عمودی (جهت یاب)

keep_settings
['y', 'y', 'y', 'y', 'y']
---------------------------------------------------

►list 
  ├── ◆dict 
  │     └──   user  :◆dict 
  │               ├───────   id  :   1    
  │               ├───────  name : Alice  
  │               └─────── scores: ►list  
  │                              ├───────  95   
  │                              ├───────  88   
  │                              └───────  76   
  ├── ◆dict 
  │     └──   user  :◆dict 
  │               ├───────   id  : 002b   
  │               ├───────  name :  Bob   
  │               └─────── scores: ►list  
  │                              ├───────  72   
  │                              ├───────  85   
  │                              └───────  90   
  └── ◆dict 
        └── bug_user:◆dict 
                  ├───────   id  : ►list  
                  │              └───────   3   
                  ├───────  name :Charlie 
                  └─────── scores: ►list  
                                 ├───────  100  
                                 ├─────── ►list 
                                 │          ├── 50 
                                 │          └── 40 
                                 └───────  70   

---------------------------------------------------
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

🔥 نقاط قوت setprint در مقایسه با pprint

  • تفاوت در انواع داده ها (تعداد ، رشته ، لیست) برای id بلافاصله روشن هستند
  • تفاوت بین user وت bug_user ایستادگی کردن
  • لیست های تو در تو (مانند لیست دوم در داخل scores) به وضوح قابل مشاهده است خطوط اتصال

با استفاده از گسترش X-Direction (افقی)

keep_settings
['y', 'y', 'x', 'x', 'x']
-----------------------------------------------------------------------------------

►list 
  ├── ◆dict 
  │     └──   user  :◆dict ───┬────────────┬────────────┐
  │                        id:  1     name: Alice  scores:►list ─┬────┬─────────┐
  │                                                             95   88         76 
  ├── ◆dict 
  │     └──   user  :◆dict ───┬────────────┬────────────┐
  │                        id:002b    name:  Bob   scores:►list ─┬────┬─────────┐
  │                                                             72   85         90 
  └── ◆dict 
        └── bug_user:◆dict ───┬────────────┬────────────┐
                           id:►list ┐ name:Charlie scores:►list ─┬────┬─────────┐
                                    3                           100 ►list ┬──┐  70 
                                                                          50 40 

------------------------------------↑------------------------------------- ↑ ↑ ----
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

🧠 با استفاده از گسترش افقی (جهت x) ، مقایسه بین آرایه ها امکان پذیر می شود

  • idبا nameوت scores به صورت افقی تراز شده و ساختند مقایسه میدانی مستقیم آسان
  • سوء استفاده یا اختلافات بلافاصله قابل توجه است
جنبه شرح
محتوای user فرهنگ لغت (idبا nameبا scores) هستند هماهنگ افقی تجسم روابط میدانی در یک خط درک آن آسان است
همان کلیدها (idبا nameبا scores) هستند در یک خط مستقیم تراز شده است مقایسه موارد بسیار آسان است
در scores لیست به صورت افقی گسترش می یابد مقادیری مانند (95 ، 88 ، 76) هستند مقایسه آسان در این ترتیب
بلافاصله روشن است که bug_user دارای a ساختار مختلف برای id (این یک لیست است) اختلافات نوع فوراً قابل مشاهده است
لیست های تو در تو scores (50 ، 40) به طور طبیعی قابل مشاهده هستند ناهنجاری های تو در تو به طور شهودی درک می شوند

setprint از یک ویژگی پیشرفته به نام استفاده می کند کنترل انبساط Y/Xبشر

این امر باعث می شود انعطاف پذیری بالا در تجسم داده های ساختاری ، مانند سیاهههای مربوط یا آرایه های 2D مانند تصاویر و همچنین آرایه هایی که حاوی چنین ساختاری هستند.

شما می توانید ساختار مورد انتظار را تعریف کرده و داده های پیچیده ، چند بعدی و نامنظم را با زحمت تجسم کنید.

علاوه بر این ،

بسته به تنظیمات ، مقایسه بین colonies قابل تجسم است ،

مؤثرتر از ابزارهایی مانند pprint یا rich برای اشکال زدایی و تجسم داده ها با ساختارهای پیچیده یا بی نظمی.

اگر احساس می کنید ابزارهای قالب بندی موجود فاقد آن هستند ، بدهید setprint یک امتحان

setprint را در Google colab امتحان کنید

می خواهم امتحان کنم setprint خودت؟ برای اجرای کد مثال به طور مستقیم در مرورگر خود بدون نیاز به نصب هر چیزی ، روی پیوند زیر کلیک کنید.

به روزرسانی عمده بعدی 1.0.0 خواهد بود.

ویژگی های آینده:

  • هشدارها و خروجی ها برای ناهنجاری های آرایه در سطوح مختلف (پایین: عدم تطابق طول ، متوسط: عدم تطابق نوع داده ، بالا: عدم تطابق بعدی)
  • قالب بندی شماره و نقل قول برای تراز و تراز نمایش (سمت چپ: مرکز: راست)
  • پیشرفت در خطوط اتصال ریشه برای انواع فرهنگ لغت
  • قابلیت تنظیم قابل تنظیم برای خطوط اتصال ، خطوط محور y و فاصله بین عناصر

از ماه مه 2025 ، setprint به مدت 6 ماه در دسترس عموم بوده است ، با نسخه کامل کنترل گسترش نزدیک به ماه اول خود.
نویسنده و کتابخانه هنوز در حال توسعه هستند ، بنابراین بازخورد ، گزارش اشکالات و پیشنهادات شما برای ویژگی های جدید بسیار مورد استقبال قرار می گیرد!

به ویژه ، هرگونه اظهار نظر یا بازخورد در مورد کنترل گسترش بسیار مفید خواهد بود.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا