@@ -448,6 +448,19 @@ def _align_auto(obj: Any, length: int, pad: str = ' '):
448
448
return s
449
449
450
450
451
+ def sanitize_key (key : str ): return key .replace ("_" , " " ).replace (" " , "" ).lower ()
452
+
453
+
454
+ def lenient_getitem (obj : dict , key : str ):
455
+ if key in obj :
456
+ return obj [key ]
457
+ sanitized_key = sanitize_key (key )
458
+ for k in obj :
459
+ if sanitize_key (k ) == sanitized_key :
460
+ return obj [k ]
461
+ return ""
462
+
463
+
451
464
def table (objs , headers = None ):
452
465
if not is_list (type (objs )):
453
466
raise TypeError ('objs must be a list' )
@@ -459,8 +472,8 @@ def table(objs, headers=None):
459
472
for k in headers :
460
473
max = len (k )
461
474
for row in map_rows :
462
- if k in row :
463
- col = row [ k ]
475
+ col = lenient_getitem ( row , k )
476
+ if col != "" :
464
477
val_size = len (_str (col ))
465
478
if val_size > max :
466
479
max = val_size
@@ -480,7 +493,7 @@ def table(objs, headers=None):
480
493
for row in map_rows :
481
494
to = "|"
482
495
for k in headers :
483
- to += '' + _align_auto (row [ k ] if k in row else "" , col_sizes [k ]) + "|"
496
+ to += '' + _align_auto (lenient_getitem ( row , k ) , col_sizes [k ]) + "|"
484
497
sb .append (to )
485
498
486
499
sb .append (f"+{ '-' * (row_width - 2 )} +" )
@@ -490,13 +503,15 @@ def table(objs, headers=None):
490
503
def printtable (obj , headers = None ):
491
504
print (table (obj , headers ))
492
505
506
+
493
507
def htmllist (d : dict ):
494
508
sb : List [str ] = ["<table><tbody>" ]
495
509
for k , v in d .items ():
496
510
sb .append (f"<tr><th>{ _str (k )} </th><td>{ htmldump (v )} </td></tr>" )
497
511
sb .append ("</tbody></table>" )
498
512
return '' .join (sb )
499
513
514
+
500
515
def htmldump (objs , headers = None ):
501
516
if is_builtin (type (objs )):
502
517
return _str (objs )
@@ -526,7 +541,7 @@ def htmldump(objs, headers=None):
526
541
if len (headers ) > 0 :
527
542
row = []
528
543
for k in headers :
529
- val = item [ k ] if k in item else ""
544
+ val = lenient_getitem ( item , k )
530
545
row .append (f"<td>{ htmldump (val )} </td>" )
531
546
rows .append ('' .join (row ))
532
547
else :
0 commit comments