|
32 | 32 |
|
33 | 33 | # all values that will only complicate workbook output types |
34 | 34 | flatdata_filtered_keys = [ |
35 | | - "_repaired_record", |
36 | 35 | "address_str", |
37 | 36 | "field_office.address_str", |
38 | | - "field_office.source_urls", |
39 | 37 | "osm.search_query", |
40 | | - "source_urls", |
41 | 38 | "wikipedia.search_query", |
42 | 39 | "wikidata.search_query", |
43 | 40 | ] |
@@ -73,13 +70,23 @@ def req_get(url: str, **kwargs) -> requests.Response: |
73 | 70 | return response |
74 | 71 |
|
75 | 72 |
|
76 | | -def _flatdict(d: dict, parent_key: str = "", sep: str = ".") -> dict: |
| 73 | +def _flatdict(d: dict, parent_key: str = "", sep: str = ".", list_sep: str = ",") -> dict: |
77 | 74 | """flatten a nested dictionary for nicer printing to workbooks (excel/csv/etc.)""" |
78 | 75 | items: list = [] |
79 | 76 | for k, v in d.items(): |
80 | 77 | new_key = f"{parent_key}{sep}{str(k)}" if parent_key else str(k) |
81 | 78 | if isinstance(v, dict): |
82 | | - items.extend(_flatdict(v, new_key, sep=sep).items()) |
| 79 | + items.extend(_flatdict(v, new_key, sep=sep, list_sep=list_sep).items()) |
| 80 | + elif isinstance(v, list): |
| 81 | + if not v: |
| 82 | + items.append((new_key, "")) |
| 83 | + elif isinstance(v[0], dict): |
| 84 | + logger.info("List of dicts: %s", v) |
| 85 | + for idx, value in enumerate(v): |
| 86 | + items.extend(_flatdict(value, f"{new_key}{sep}{idx}", sep=sep, list_sep=list_sep).items()) |
| 87 | + |
| 88 | + else: |
| 89 | + items.append((new_key, list_sep.join(v))) |
83 | 90 | else: |
84 | 91 | items.append((new_key, v)) |
85 | 92 | return dict(items) |
|
0 commit comments