我的個人會計應用程式遇到了挑戰,我什至無法想象如何應對。
該腳本正在為 Sankey 圖生成一些 JSON,該圖顯示現金在分類帳中移動:

問題是如果現金回圈移動,例如從賬本 A 到賬本 B 到 C 再回到 A,Sankey 就會出錯。
我正在嘗試撰寫一些代碼來評估資料,如果有圓周運動,那么它應該通過洗掉其中一個鏈接來打破那個圓圈。
代碼以字典字典開頭,其中包含在每對可能的分類帳之間移動的現金數量。頂部字典包含作為鍵的分類帳和作為值的另一個分類帳字典。內部字典包含作為鍵的分類帳和作為值的現金移動量。
下面是字典的 print(str(dict))。零表示兩個賬本之間沒有現金流動。由于堆疊溢位字符限制,不得不截斷。
你會建議如何解決這個問題嗎?
{<Ledger: Basic food>: {<Ledger: Basic food>: 0, <Ledger: Benefits>: 0, <Ledger: Books>: 0, <Ledger: Clothing>: 0, <Ledger: Coffee & Snacks>: 0, <Ledger: Computer & Electrical>: 0, <Ledger: Council tax>: 0, <Ledger: Electricity & Gas>: 0, <Ledger: Grooming>: 0, <Ledger: Hobbies>: 0, <Ledger: Home Supplies>: 0, <Ledger: Income tax>: 0, <Ledger: Jacks Account>: 0, <Ledger: Jacks Float>: 0, <Ledger: Jacks Income>: 0, <Ledger: Jacks Monzo>: 0, <Ledger: Janes Account>: 0, <Ledger: Janes Float>: 0, <Ledger: Janes Income>: 0, <Ledger: Janes Monzo>: 0, <Ledger: Joint Account>: 0, <Ledger: Lodger>: 0, <Ledger: Mortgage Interest>: 0, <Ledger: Mortgage Payments>: 0, <Ledger: Mortgages>: 0, <Ledger: Personal Gear>: 0, <Ledger: Profit & Loss Accounts>: 0, <Ledger: Property>: 0, <Ledger: Public Transport>: 0, <Ledger: Take away>: 0, <Ledger: Tax Liability>: 0, <Ledger: Taxis>: 0, <Ledger: Toys>: 0}, <Ledger: Benefits>: {<Ledger: Basic food>: 0, <Ledger: Benefits>: 0,
<Ledger: Books>: 0, <Ledger: Clothing>: 0, <Ledger: Coffee & Snacks>: 0, <Ledger: Computer & Electrical>: 0, <Ledger: Council tax>: 0, <Ledger: Electricity & Gas>: 0, <Ledger: Grooming>: 0, <Ledger: Hobbies>: 0, <Ledger: Home Supplies>: 0, <Ledger: Income tax>: 0, <Ledger: Jacks Account>: 0, <Ledger: Jacks Float>: 0, <Ledger: Jacks Income>: 0, <Ledger: Jacks Monzo>: 0, <Ledger: Janes Account>: 0, <Ledger: Janes Float>: 0, <Ledger: Janes Income>: 0, <Ledger: Janes Monzo>: 0, <Ledger: Joint Account>: 0, <Ledger: Lodger>: 0, <Ledger: Mortgage Interest>: 0, <Ledger: Mortgage Payments>: 0, <Ledger: Mortgages>: 0, <Ledger: Personal Gear>: 0, <Ledger: Profit & Loss Accounts>: 0, <Ledger: Property>: 0, <Ledger: Public Transport>: 0, <Ledger: Take away>: 0, <Ledger: Tax Liability>: 0, <Ledger: Taxis>: 0, <Ledger: Toys>: 0}, <Ledger: Books>: {<Ledger: Basic food>: 0, <Ledger: Benefits>: 0, <Ledger: Books>: 0, <Ledger: Clothing>: 0, <Ledger: Coffee & Snacks>: 0, <Ledger: Computer & Electrical>: 0, <Ledger: Council tax>: 0, <Ledger: Electricity & Gas>: 0, <Ledger: Grooming>: 0, <Ledger: Hobbies>: 0, <Ledger: Home Supplies>: 0, <Ledger: Income tax>: 0, <Ledger: Jacks Account>: 0, <Ledger: Jacks Float>: 0, <Ledger: Jacks Income>: 0, <Ledger: Jacks Monzo>: 0, <Ledger: Janes Account>: 0, <Ledger: Janes Float>: 0, <Ledger: Janes Income>: 0, <Ledger: Janes Monzo>: 0, <Ledger: Joint Account>: 0, <Ledger: Lodger>: 0, <Ledger: Mortgage Interest>: 0, <Ledger: Mortgage Payments>: 0, <Ledger: Mortgages>: 0, <Ledger: Personal Gear>: 0, <Ledger: Profit & Loss Accounts>: 0, <Ledger: Property>: 0, <Ledger: Public Transport>: 0, <Ledger: Take away>: 0, <Ledger: Tax Liability>: 0, <Ledger: Taxis>: 0, <Ledger: Toys>: 0}, <Ledger: Clothing>: {<Ledger: Basic food>: 0, <Ledger: Benefits>: 0, <Ledger: Books>: 0, <Ledger: Clothing>: 0, <Ledger: Coffee & Snacks>: 0, <Ledger: Computer & Electrical>: 0, <Ledger: Council tax>: 0, <Ledger: Electricity & Gas>: 0, <Ledger: Grooming>: 0, <Ledger: Hobbies>: 0, <Ledger: Home Supplies>: 0, <Ledger: Income tax>: 0, <Ledger: Jacks Account>: 0, <Ledger: Jacks Float>: 0, <Ledger: Jacks Income>: 0, <Ledger: Jacks Monzo>: 0, <Ledger: Janes Account>: 0, <Ledger: Janes Float>: 0, <Ledger: Janes Income>: 0, <Ledger: Janes Monzo>: 0, <Ledger: Joint Account>: 0, <Ledger: Lodger>: 0, <Ledger: Mortgage Interest>: 0, <Ledger: Mortgage Payments>: 0, <Ledger: Mortgages>: 0, <Ledger: Personal Gear>: 0, <Ledger: Profit & Loss Accounts>: 0, <Ledger: Property>: 0, <Ledger: Public Transport>: 0, <Ledger: Take away>: 0, <Ledger: Tax Liability>: 0, <Ledger: Taxis>: 0, <Ledger: Toys>: 0}, <Ledger: Coffee & Snacks>: {<Ledger: Basic food>: 0, <Ledger: Benefits>: 0, <Ledger: Books>: 0, <Ledger: Clothing>: 0, <Ledger: Coffee & Snacks>: 0, <Ledger: Computer
& Electrical>: 0, <Ledger: Council tax>: 0, <Ledger: Electricity & Gas>: 0, <Ledger: Grooming>: 0, <Ledger: Hobbies>: 0,
<Ledger: Home Supplies>: 0, <Ledger: Income tax>: 0, <Ledger: Jacks Account>: 0, <Ledger: Jacks Float>: 0, <Ledger: Jacks Income>: 0, <Ledger: Jacks Monzo>: 0, <Ledger: Janes Account>: 0, <Ledger: Janes Float>: 0, <Ledger: Janes Income>: 0, <Ledger: Janes Monzo>: 0, <Ledger: Joint Account>: 0, <Ledger: Lodger>: 0, <Ledger: Mortgage Interest>: 0, <Ledger: Mortgage Payments>: 0, <Ledger: Mortgages>: 0, <Ledger: Personal Gear>: 0, <Ledger: Profit & Loss Accounts>: 0, <Ledger: Property>: 0, <Ledger: Public Transport>: 0, <Ledger: Take away>: 0, <Ledger: Tax Liability>: 0, <Ledger: Taxis>: 0, <Ledger: Toys>: 0}, <Ledger: Computer & Electrical>: {<Ledger: Basic food>: 0, <Ledger: Benefits>: 0, <Ledger: Books>: 0, <Ledger:
Clothing>: 0, <Ledger: Coffee & Snacks>: 0, <Ledger: Computer & Electrical>: 0, <Ledger: Council tax>: 0, <Ledger: Electricity & Gas>: 0, <Ledger: Grooming>: 0, <Ledger: Hobbies>: 0, <Ledger: Home Supplies>: 0, <Ledger: Income tax>: 0, <Ledger: Jacks Account>: 0, <Ledger: Jacks Float>: 0, <Ledger: Jacks Income>: 0, <Ledger: Jacks Monzo>: 0, <Ledger: Janes Account>: 0, <Ledger: Janes Float>: 0, <Ledger: Janes Income>: 0, <Ledger: Janes Monzo>: 0, <Ledger: Joint Account>: 0, <Ledger: Lodger>: 0, <Ledger: Mortgage Interest>: 0, <Ledger: Mortgage Payments>: 0, <Ledger: Mortgages>: 0, <Ledger: Personal
Gear>: 0, <Ledger: Profit & Loss Accounts>: 0, <Ledger: Property>: 0, <Ledger: Public Transport>: 0, <Ledger: Take away>: 0, <Ledger: Tax Liability>: 0, <Ledger: Taxis>: 0, <Ledger: Toys>: 0}, <Ledger: Council tax>: {<Ledger: Basic food>: 0,
<Ledger: Benefits>: 0, <Ledger: Books>: 0, <Ledger: Clothing>: 0, <Ledger: Coffee & Snacks>: 0, <Ledger: Computer & Electrical>: 0, <Ledger: Council tax>: 0, <Ledger: Electricity & Gas>: 0, <Ledger: Grooming>: 0, <Ledger: Hobbies>: 0, <Ledger: Home Supplies>: 0, <Ledger: Income tax>: 0, <Ledger: Jacks Account>: 0, <Ledger: Jacks Float>: 0, <Ledger: Jacks Income>: 0, <Ledger: Jacks Monzo>: 0, <Ledger: Janes Account>: 0, <Ledger: Janes Float>: 0, <Ledger: Janes Income>: 0, <Ledger: Janes Monzo>: 0, <Ledger: Joint Account>: 0, <Ledger: Lodger>: 0, <Ledger: Mortgage Interest>: 0, <Ledger: Mortgage Payments>: 0, <Ledger: Mortgages>: 0, <Ledger: Personal Gear>: 0, <Ledger: Profit & Loss Accounts>: 0, <Ledger: Property>: 0, <Ledger: Public Transport>: 0, <Ledger: Take away>: 0, <Ledger: Tax Liability>: 0, <Ledger: Taxis>: 0, <Ledger: Toys>: 0}, <Ledger: Electricity & Gas>:
...截斷
uj5u.com熱心網友回復:
看看下面的例子。“all_ledgers”應該代表您的頂級字典。它遞回地遍歷具有正值的鍵,如果遇到初始目標(第一次迭代的起始值)則回傳 True。如果它通過整個搜索而沒有找到回圈,則回傳 False。快取是為了防止無限回圈。
all_ledgers={'a':{'b':0,'c':1},
'b':{'a':1},
'c':{'b':1}}
def find_cycle(start,target=""):
if target=="":
target=start
try:
cache
except NameError:
cache = [start]
for ledger in all_ledgers[start].keys():
if all_ledgers[start][ledger]>0 and ledger==target:
return True
elif all_ledgers[start][ledger]>0 and ledger not in cache:
cache.append(ledger)
return find_cycle(ledger,target)
return False
if find_cycle('a'):
print("There is a cycle.")
else:
print("There is no cycle.")
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/420202.html
標籤:
下一篇:對于每個專案更新資料庫
