条件が満たされた場合、Pythonはネストされた辞書の値を変更します

wa4557

私は以前に同様の質問がすでに行われていることを知っていますが、私の特別な場合にそれらを実装するのに本当に問題があります:

たとえば、さまざまな深さの辞書があるとします。

dicti = {'files':
    {'a':{'offset':100, 'start': 0}, 
     'b':{
         'c':{'offset':50, 'start':0}
         'd':{'offset':70, 'start':0}  
         }
     'e':{
         'f':{'offset':80, 'start':0}
         'g':{'offset':30, 'start':0}  
         'h':{'offset':20, 'start':0}   
         } 
    }
        }
   etc... (with a lot more different levels and entries)

だから今、私は基本的に同じ構造とキーを持つその辞書のコピーが欲しいのですが、'offset'(どのレベルでも)より大きい場合は、次の50 'offset'ように変更する必要があります0

ある種の反復関数が最適だと思いますが、頭を悩ませることはできません...

Robᵩ

コピーに標準の機構を使用してから、コピーした辞書を変更するか(私の例ではソリューション#1)、同じ関数でコピーと変更を行うことができます(ソリューション#2)。

どちらの場合でも、再帰関数を探しています。

import copy
from pprint import pprint
dicti = {'files':
    {'a':{'offset':100, 'start': 0},
     'b':{
         'c':{'offset':50, 'start':0},
         'd':{'offset':70, 'start':0},
         },
     'e':{
         'f':{'offset':80, 'start':0},
         'g':{'offset':30, 'start':0},
         'h':{'offset':20, 'start':0},
         }
    }
}

# Solution 1, two passes
def modify(d):
    if isinstance(d, dict):
        if d.get('offset', 0) > 50:
            d['offset'] = 0
        for k,v in d.items():
            modify(v)
dictj = copy.deepcopy(dicti)
modify(dictj)
pprint(dictj)

# Solution 2, copy and modify in one pass
def copy_and_modify(d):
    if isinstance(d, dict):
        d2 = {k:copy_and_modify(v) for k,v in d.items()}
        if d2.get('offset') > 50:
            d2['offset'] = 0
        return d2
    return d
dictj = copy_and_modify(dicti)
pprint(dictj)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

複数の辞書で値を確認する方法、条件が満たされた場合はいずれか/すべてを変更する

分類Dev

文字列がNoneの場合は、ネストされた辞書のlen(string)の最大値を取得します

分類Dev

Pythonはキーのリストでネストされた辞書の値を変更します

分類Dev

条件が満たされた場合にのみ辞書に追加します

分類Dev

Pythonを使用して条件が満たされた場合、リスト要素の平均値を見つけますか?

分類Dev

別の辞書キー名と一致する場合は、ネストされた辞書キー名の名前を変更します

分類Dev

辞書のネストされた値を変更する

分類Dev

辞書のネストされた値を変更する

分類Dev

ネストされた辞書の値を変更する

分類Dev

条件が満たされた場合、数式を値に変換します

分類Dev

指定されたキーにNone値が含まれている場合は、ネストされた辞書からアイテムを削除します

分類Dev

条件が満たされた場合はJOINを省略します

分類Dev

特定の条件が満たされた場合、Excelはセルを数値でカウントします

分類Dev

Python:他の値が真の場合、ネストされた辞書の値の出現をカウントします

分類Dev

ソートされた一意の値を持つネストされたDataFrameをPythonのネストされた辞書に変換します

分類Dev

行の条件を評価し、条件が満たされた場合は特定の値を返します

分類Dev

リストを含むネストされた辞書のキーと値を変更します

分類Dev

何らかの条件が満たされた場合に別の辞書から辞書を作成する方法

分類Dev

特定の条件が満たされた場合にのみサイズ変更機能を実行します

分類Dev

条件が満たされた場合は、前の行をコピーします

分類Dev

存在する場合と存在しない場合があるネストされた辞書値の印刷

分類Dev

別の列の条件が満たされた場合にのみ、2値列の値を反対の値に変更します

分類Dev

ネストされた辞書pythonを解析し、そのリーフノードがすべて空の場合は完全な階層を削除します

分類Dev

2つのネストされた辞書pythonの値を減算します

分類Dev

2つの辞書値リストを比較し、Python3で別のリスト値が変更された場合にリスト値を更新するにはどうすればよいですか?

分類Dev

ネストされた辞書の値をすばやく変更する

分類Dev

Pythonはネストされた辞書のネストされたループを減らします

分類Dev

列Aの条件が満たされた場合は、列Aの行に列Bの値を入力します。

分類Dev

bootstrap-vueチェックボックスは、特定の条件が満たされた場合に変更を防止します

Related 関連記事

  1. 1

    複数の辞書で値を確認する方法、条件が満たされた場合はいずれか/すべてを変更する

  2. 2

    文字列がNoneの場合は、ネストされた辞書のlen(string)の最大値を取得します

  3. 3

    Pythonはキーのリストでネストされた辞書の値を変更します

  4. 4

    条件が満たされた場合にのみ辞書に追加します

  5. 5

    Pythonを使用して条件が満たされた場合、リスト要素の平均値を見つけますか?

  6. 6

    別の辞書キー名と一致する場合は、ネストされた辞書キー名の名前を変更します

  7. 7

    辞書のネストされた値を変更する

  8. 8

    辞書のネストされた値を変更する

  9. 9

    ネストされた辞書の値を変更する

  10. 10

    条件が満たされた場合、数式を値に変換します

  11. 11

    指定されたキーにNone値が含まれている場合は、ネストされた辞書からアイテムを削除します

  12. 12

    条件が満たされた場合はJOINを省略します

  13. 13

    特定の条件が満たされた場合、Excelはセルを数値でカウントします

  14. 14

    Python:他の値が真の場合、ネストされた辞書の値の出現をカウントします

  15. 15

    ソートされた一意の値を持つネストされたDataFrameをPythonのネストされた辞書に変換します

  16. 16

    行の条件を評価し、条件が満たされた場合は特定の値を返します

  17. 17

    リストを含むネストされた辞書のキーと値を変更します

  18. 18

    何らかの条件が満たされた場合に別の辞書から辞書を作成する方法

  19. 19

    特定の条件が満たされた場合にのみサイズ変更機能を実行します

  20. 20

    条件が満たされた場合は、前の行をコピーします

  21. 21

    存在する場合と存在しない場合があるネストされた辞書値の印刷

  22. 22

    別の列の条件が満たされた場合にのみ、2値列の値を反対の値に変更します

  23. 23

    ネストされた辞書pythonを解析し、そのリーフノードがすべて空の場合は完全な階層を削除します

  24. 24

    2つのネストされた辞書pythonの値を減算します

  25. 25

    2つの辞書値リストを比較し、Python3で別のリスト値が変更された場合にリスト値を更新するにはどうすればよいですか?

  26. 26

    ネストされた辞書の値をすばやく変更する

  27. 27

    Pythonはネストされた辞書のネストされたループを減らします

  28. 28

    列Aの条件が満たされた場合は、列Aの行に列Bの値を入力します。

  29. 29

    bootstrap-vueチェックボックスは、特定の条件が満たされた場合に変更を防止します

ホットタグ

アーカイブ