Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3中嵌套字典的迭代_Python_Dictionary_Syntax_Iteration - Fatal编程技术网

Python 3中嵌套字典的迭代

Python 3中嵌套字典的迭代,python,dictionary,syntax,iteration,Python,Dictionary,Syntax,Iteration,字典示例: data_noisy = {'P1': {'age': 'eighty two', 'salary': '60196.0', 'suburb': 'Toorak', 'language': 'English'}, 'P2': {'age': '49', 'salary': '-16945514.0', 'suburb': 'St. Kilda', 'language':

字典示例:

    data_noisy = {'P1': {'age': 'eighty two', 'salary': '60196.0', 'suburb': 
                 'Toorak', 'language': 'English'},
                 'P2': {'age': '49', 'salary': '-16945514.0', 'suburb': 'St. 
                 Kilda', 'language': 'Chinese'},
                 'P3': {'age': '54', 'salary': '49775.0', 'suburb': 
                 'Neverland', 'language': 'Italian'}}
想要的输出:

    data_clean = {'P1': {'age': 'None', 'salary': '60196.0', 'suburb': 
                 'Toorak', 'language': 'English'},
                 'P2': {'age': '49', 'salary': 'None', 'suburb': 'St. 
                 Kilda', 'language': 'Chinese'},
                 'P3': {'age': '54', 'salary': '49775.0', 'suburb': 'None', 
                 'language': 'Italian'}}


    MAX_SALARY = 200000

    VALID_SUBURBS = ["Richmond", "Southbank", "Fitzroy",
              "Docklands", "St. Kilda", "Footscray",
              "Hawthorn", "Parkville", "Toorak", "Brunswick",
              "Kensington", "Flemington", "Frankston", "Dandenong",
              "Caulfield", "Collingwood"]

def clean_data(data):

    data_dict = {}
    data_dict = data
    for key, value in data.items():

        for val in value.items():

            age = value['age']
            if not age.isdigit():
                data_dict['age'] = 'None'
            else:
                data_dict['age'] = value['age']

            salary = float(value['salary'])
            if salary < 0 or salary > MAX_SALARY:
                data_dict['salary'] = 'None'
            else:
                data_dict['salary'] = value['salary']

            suburb = value['suburb']
            if suburb not in VALID_SUBURBS:
                data_dict['suburb'] = 'None'
            else:
                data_dict['suburb'] = value['suburb']

    print(data_dict)
data_clean={'P1':{'age':'None','salary':'60196.0','suburban':
“Toorak”,“language”:“English”},
‘P2’:{‘年龄’:‘49’,‘薪水’:‘无’,‘郊区’:‘圣。
基尔达语,"语言":"中文",,
‘P3’:{‘年龄’:‘54’,‘薪水’:‘49775.0’,‘郊区’:‘无’,
“语言”:“意大利语”}
最高工资=200000
有效郊区=[“里士满”、“南岸”、“菲茨罗伊”,
“码头区”、“圣基尔达”、“富茨基”,
“山楂树”、“帕克维尔”、“图拉克”、“布伦瑞克”,
“肯辛顿”、“弗莱明顿”、“弗兰克斯顿”、“丹德农”,
“考尔菲尔德”、“科林伍德”]
def清洁_数据(数据):
数据_dict={}
数据dict=数据
对于键,data.items()中的值:
对于value.items()中的val:
年龄=值['age']
如果不是age.isdigit():
数据记录['age']=“无”
其他:
数据dict['age']=值['age']
工资=浮动(值['salary'])
如果薪资<0或薪资>最高薪资:
数据目录['salary']=“无”
其他:
数据dict['salary']=值['salary']
郊区=值[“郊区”]
如果郊区不在有效的郊区:
数据目录['suburban']='None'
其他:
数据dict['suburban']=值['suburban']
打印(数据记录)
我不想更改原始字典,所以尝试复制它,然后迭代“清理”数据。 似乎我刚刚得到一个运行时错误:字典在迭代过程中改变了大小

如果您能在使用这些嵌套字典时提供语法等方面的帮助,我们将不胜感激


谢谢。

因为您不想修改原始的目录,但您打算使用一份副本并修改该副本,所以您需要
deepcopy

from copy import deepcopy

data_clean = deepcopy(data_noisy)

for i in data_clean.values():
    if not i['age'].isdigit():
        i['age'] = 'None'
    if float(i['salary']) < 0 or float(i['salary']) > MAX_SALARY:
        i['salary'] = 'None'
    if i['suburb'] not in VALID_SUBURBS:
        i['suburb'] = 'None'

print(data_noisy)
print(data_clean)
“所以我试图复制它”。你在哪里做的?
{'P1': {'age': 'eighty two', 'salary': '60196.0', 'suburb': 'Toorak', 'language': 'English'}, 'P2': {'age': '49', 'salary': '-16945514.0', 'suburb': 'St. Kilda', 'language': 'Chinese'}, 'P3': {'age': '54', 'salary': '49775.0', 'suburb': 'Neverland', 'language': 'Italian'}}
{'P1': {'age': 'None', 'salary': '60196.0', 'suburb': 'Toorak', 'language': 'English'}, 'P2': {'age': '49', 'salary': 'None', 'suburb': 'St. Kilda', 'language': 'Chinese'}, 'P3': {'age': '54', 'salary': '49775.0', 'suburb': 'None', 'language': 'Italian'}}