如何通过检查值向字典添加键

2024-04-23 07:21:49 发布

您现在位置:Python中文网/ 问答频道 /正文

  • 我需要检查“Type”是否为“-”或“,”

  • 创建一个与“类型”相同的“值”的新键

  • 如果“-”,则其为“或”

  • 如果是“”,那么它的“=”

下面是示例词典

{
    'RULES': {
        'rule1': {
            'Range': '0',
            'Type': '0-10'
        }
    },
    'rule2': {
        'Range': '1-10',
        'Type': '0,10',
    },
    'rule3': {
        'Range': '11-50',
        'order': '3'
    }
}

预料之外

{
   'RULES': {
       'rule1': {
           'Range': '0',
           'Type': '0-10',
           'value':'0-10',
           'operator' :'or'
       }
   },
   'rule2': {
       'Range': '1-10',
       'Type': '0,10',
       'value':'0,10',
       'operator':'='
   },
   'rule3': {
       'Range': '11-50',
       'order': '3'
   }
}

代码

for i,j in a.items():
    for k,l in j.items():
        l['value'] = l['Type']
        if '-' in l['Type']:
            l['operator'] = '='
        if ',' in l['Type']:
            l['operator'] = 'in'

获取错误AttributeError:'str'对象没有属性'items'


Tags: in类型forifvaluetypeorderitems
3条回答

为了提高您的编码技巧,您可能希望正确地使用if语句,避免使用多个For语句(改用递归函数)。这将允许您避免角落案例导致问题

因此,您将定义一个函数来执行dict对象的递归更新,条件是键“Type”必须可用

import re
def update_rule(rule: dict):
    if 'Type' in rule.keys():
        if ',' in rule['Type']:
            operator = '='
        else:
            operator = 'or'
        rule.update({'operator': operator})
    else:
        for v in rule.values():
            if isinstance(v, dict):
                update_rule(v)

然后,要更新字典,只需将函数应用于输入:

update_rule(my_input_dict)

试试这个

d1 = {
    'RULES': {
        'rule1': { 'Range': '0', 'Type': '0-10' },
        'rule2': { 'Range': '1-10', 'Type': '0,10', },
        'rule3': { 'Range': '11-50', 'order': '3' }
    }
}

for v in d1.values():
    for y in v.values():
        if 'Type' in y.keys():
            y['value'] = y['Type']
            if '-' in y['Type']:
                y['operator'] = 'or'
            elif ',' in y['Type']:
                y['operator'] = '='
print(d1)

输出

{'RULES': {'rule1': {'Range': '0', 'Type': '0-10', 'value': '0-10', 'operator': 'or'}, 'rule2': {'Range': '1-10', 'Type': '0,10', 'value': '0,10', 'operator': '='}, 'rule3': {'Range': '11-50', 'order': '3'}}}

为了便于阅读

d1 = {
    'RULES':{
        'rule1': {
            'Range': '0', 
            'Type': '0-10', 
            'value': '0-10', 
            'operator': 'or'
        },
        'rule2': {
            'Range': '1-10', 
            'Type': '0,10', 
            'value': '0,10', 
            'operator': '='
        },
        'rule3': {
            'Range': '11-50', 
            'order': '3'
        }
    }
}

代码如下:

dict1 = { 'RULES': { 'rule1': { 'Range': '0', 'Type': '0-10' }}, 'rule2': { 'Range': '1-10', 'Type': '0,10', }, 'rule3': { 'Range': '11-50', 'order': '3' } }


for i,j in dict1.items():

    for k,l in j.items():

        if 'dict' in str(type(l)):

            l['value'] = l['Type']
            if '-' in l['Type']:
                l['operator'] = '='
            if ',' in l['Type']:
                l['operator'] = 'in'


print(dict1)

相关问题 更多 >