假設我有一個嵌套的字典,比如一本書的章節和章節(平衡的樹結構)。我想將它轉換為一個表,其中每個分支都是一行,鍵是葉子值之外的值。
{
"A1": {
"A1-1": {
"A1-1-1": "0.2028",
"A1-1-2": "0.1901",
},
"A1-2": {
"A1-2-1": "0.1951",
"A1-2-2": "0.1806",
},
},
"A2" {
...
喜歡:
A1 A1-1 A1-1-1 0.2028
A1 A1-1 A1-1-2 0.1901
A1 A1-2 A1-2-1 0.1951
我嘗試使用,json_normalize(data)但它只給出了 1 行和一些嵌套的列標題。
uj5u.com熱心網友回復:
您可以使用一些遞回處理:
def superitems(obj):
if isinstance(obj, dict):
for k, v in obj.items():
for i in superitems(v):
yield (k,) i
else:
yield (obj,)
[*superitems(data)]
# [('A1', 'A1-1', 'A1-1-1', '0.2028'),
# ('A1', 'A1-1', 'A1-1-2', '0.1901'),
# ('A1', 'A1-2', 'A1-2-1', '0.1951'),
# ('A1', 'A1-2', 'A1-2-2', '0.1806')]
這可以用于任何輸出:
print("\n".join(map("\t".join, superitems(data))))
A1 A1-1 A1-1-1 0.2028
A1 A1-1 A1-1-2 0.1901
A1 A1-2 A1-2-1 0.1951
A1 A1-2 A1-2-2 0.1806
uj5u.com熱心網友回復:
- 你需要先把字典弄平,我找到了這段代碼,但我找不到它的歸屬;但它有效:
def flatten(d, c = []):
for a, b in d.items():
yield from([c [a, b]]
if not isinstance(b, dict)
else flatten(b, c [a]))
- 使用制表以您想要的格式生成輸出表
dict = {....}
output = list(flatten(dict))
print(tabulate(output))
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/352924.html
上一篇:意外的UserDict行為
