簡體   English   中英

如何用 if else 語句很好地覆蓋嵌套字典中的值

[英]How do I overwrite value in nested dictionary with if else statement nicely

我有一個嵌套字典,我想在其中存儲一些信息。

d = {0:{'a':無,'b':無,'c':無},1:{'a':無,'b':無,'c':無},2:{ 'a':無,'b':無,'c':無}}

每次程序收到結果時,我都想重寫值“a”、“b”和“c”。

如果值 'a' 為 none,則應僅填充 'a',否則如果 'a' 不是 none 且 'b' 為 none,則填充 'b',如果 'a' 和 'b' 為 none,則填充'c',如果全部填滿,將所有內容移到前面並填充'c'。

我的代碼是這樣的:

    a_conditon = d.get(index, {}).get('a') is None
    b_conditon = d.get(index, {}).get('b') is None
    c_conditon = d.get(index, {}).get('c') is None

    if (a_conditon):
        d.setdefault(index, {})['a']= bool(random.getrandbits(1))

    elif ((not a_conditon) and b_conditon):
        d.setdefault(index, {})['b']= bool(random.getrandbits(1))

    elif ((not a_conditon) and (not b_conditon) and c_conditon):
        d.setdefault(index, {})['c']= bool(random.getrandbits(1))

    elif ((not a_conditon) and (not b_conditon) and (not c_conditon)):
        d.setdefault(index, {})['a']= d.get(index, {}).get('b')
        d.setdefault(index, {})['b']= d.get(index, {}).get('c')
        d.setdefault(index, {})['c']= bool(random.getrandbits(1))

但是,我馬上就填滿了所有 3 個條目。 有人可以幫我指出這一點嗎? 我不知道哪里出錯了

我根據您描述的邏輯嘗試了代碼,並將其放入索引值為 0、1、2 的循環中。 這對我來說似乎很好。 您能否驗證循環並且每次在循環中都評估條件檢查a_conditionb_conditionc_condition 此外,示例中有 2 個循環:

  1. 外循環遍歷索引值
  2. 內循環迭代 4 次以運行 4 個所需的狀態

例如,在第一個循環中,對於索引值為 0,執行第一個狀態以產生輸出{0: {'a': True, 'b': None, 'c': None}, 1: {'a': None, 'b': None, 'c': None}, 2: {'a': None, 'b': None, 'c': None}} ,然后是下一個狀態{0: {'a': True, 'b': False, 'c': None}, 1: {'a': None, 'b': None, 'c': None}, 2: {'a': None, 'b': None, 'c': None}}

這是代碼和所需的輸出。

while(index <=2):
    count = 3
    while(count>=0):
        a_conditon = d.get(index, {}).get('a') is None
        b_conditon = d.get(index, {}).get('b') is None
        c_conditon = d.get(index, {}).get('c') is None

        if (a_conditon):
            d.setdefault(index, {})['a']= bool(random.getrandbits(1))

        elif ((not a_conditon) and b_conditon):
            d.setdefault(index, {})['b']= bool(random.getrandbits(1))

        elif ((not a_conditon) and (not b_conditon) and c_conditon):
            d.setdefault(index, {})['c']= bool(random.getrandbits(1))

        elif ((not a_conditon) and (not b_conditon) and (not c_conditon)):
            d.setdefault(index, {})['a']= d.get(index, {}).get('b')
            d.setdefault(index, {})['b']= d.get(index, {}).get('c')
            d.setdefault(index, {})['c']= bool(random.getrandbits(1))
        print(d)
        count -=1
    index += 1

運行索引值為 0,1,2 時的輸出

{0: {'a': True, 'b': None, 'c': None}, 1: {'a': None, 'b': None, 'c': None}, 2: {'a': None, 'b': None, 'c': None}}
{0: {'a': True, 'b': False, 'c': None}, 1: {'a': None, 'b': None, 'c': None}, 2: {'a': None, 'b': None, 'c': None}}
{0: {'a': True, 'b': False, 'c': True}, 1: {'a': None, 'b': None, 'c': None}, 2: {'a': None, 'b': None, 'c': None}}
{0: {'a': False, 'b': True, 'c': False}, 1: {'a': None, 'b': None, 'c': None}, 2: {'a': None, 'b': None, 'c': None}}
{0: {'a': False, 'b': True, 'c': False}, 1: {'a': False, 'b': None, 'c': None}, 2: {'a': None, 'b': None, 'c': None}}
{0: {'a': False, 'b': True, 'c': False}, 1: {'a': False, 'b': False, 'c': None}, 2: {'a': None, 'b': None, 'c': None}}
{0: {'a': False, 'b': True, 'c': False}, 1: {'a': False, 'b': False, 'c': True}, 2: {'a': None, 'b': None, 'c': None}}
{0: {'a': False, 'b': True, 'c': False}, 1: {'a': False, 'b': True, 'c': False}, 2: {'a': None, 'b': None, 'c': None}}
{0: {'a': False, 'b': True, 'c': False}, 1: {'a': False, 'b': True, 'c': False}, 2: {'a': True, 'b': None, 'c': None}}
{0: {'a': False, 'b': True, 'c': False}, 1: {'a': False, 'b': True, 'c': False}, 2: {'a': True, 'b': False, 'c': None}}
{0: {'a': False, 'b': True, 'c': False}, 1: {'a': False, 'b': True, 'c': False}, 2: {'a': True, 'b': False, 'c': False}}
{0: {'a': False, 'b': True, 'c': False}, 1: {'a': False, 'b': True, 'c': False}, 2: {'a': False, 'b': False, 'c': True}}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM