在Python中取出内部字典的键和值并删除内部字典

2024-09-29 21:35:33 发布

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

我有一本这样的字典:

{'some_company_100': {'key1': 'value1',
  'key2': 'value2',
  'key3': 'value3',
  'key4': 'value4',
  'key5': 'value5',
  'key6': {'key6_1': 'value6_1', 'key6_2': 'value6_2'},
  'key7': 'value7'},
 'some_company_101': {'key1': 'valuea',
  'key2': 'valueb',
  'key3': 'valuec',
  'key4': 'valued',
  'key5': 'valuee',
  'key6': {'keyf_1': 'valuef_1', 'keyf_2': 'valuef_2'},
  'key7': 'value7'}}

我需要把里面的字典拿出来去掉嵌套的字典。 我试过的方法是:

for key, value in final_dict.iteritems():
    for k, v in value.copy().iteritems():
        if isinstance(v, dict):
            value.update(v)
            del[k]

但问题是,内部字典中的迭代必须在字典的copy()上进行,因此,如果从v中取出v后,v在原始字典中存在,则无法删除k。如果我从value.copy().iteritems()中排除.copy()。它返回一个错误:`RuntimeError:dictionary在迭代期间更改了大小。 更重要的是,我试图创造一个通用的,而不是使用

if k=='key6':
    do something

是的

期望输出:

{'some_company_100': {'key1': 'value1',
  'key2': 'value2',
  'key3': 'value3',
  'key4': 'value4',
  'key5': 'value5',
  'key6_1': 'value6_1',
  'key6_2': 'value6_2',
  'key7': 'value7'},
 'some_company_101': {'key1': 'valuea',
  'key1': 'valueb',
  'key2': 'valuec',
  'key4': 'valued',
  'key5': 'valuee', 
  'key6_1': 'value6_a', 
  'key6_2': 'value6_b'
  'key7': 'value7'}}

Tags: 字典valuesomecompanykey2key1copykey3
2条回答

您只需创建一个新字典,并使用临时字典向中添加新值。这将允许原始词典保持不变

示例:

result = {}
for inner in d:
    temp = {}
    for key in d[inner]:
        curr = d[inner][key]
        if isinstance(curr, dict):
            temp.update(curr)
        else:
            temp[key] = curr

    result[inner] = temp

print(result)

输出:

{'some_company_100': {'key1': 'value1', 'key2': 'value2', 'key3': 'value3', 'key4': 'value4', 'key5': 'value5', 'key6_1': 'value6_1', 'key6_2': 'value6_2', 'key7': 'value7'}, 'some_company_101': {'key1': 'valuea', 'key2': 'valueb', 'key3': 'valuec', 'key4': 'valued', 'key5': 'valuee', 'keyf_1': 'valuef_1', 'keyf_2': 'valuef_2', 'key7': 'value7'}}

在这里,虽然我不认为这是非常理想的,但这段代码的工作原理和预期的一样!:D级

import copy

dictionnary = {'some_company_100': {'key1': 'value1',
                      'key2': 'value2',
                      'key3': 'value3',
                      'key4': 'value4',
                      'key5': 'value5',
                      'key6': {'key6_1': 'value6_1', 'key6_2': 'value6_2'},
                      'key7': 'value7'},
 'some_company_101': {'key1': 'valuea',
                      'key2': 'valueb',
                      'key3': 'valuec',
                      'key4': 'valued',
                      'key5': 'valuee',
                      'key6': {'keyf_1': 'valuef_1', 'keyf_2': 'valuef_2'},
                      'key7': 'value7'}}
keys_to_delete = []
keys_to_add = []
for company in dictionnary:
    for key in dictionnary[company]:
        if type(dictionnary[company][key]) == type({}):
            for nested_key in dictionnary[company][key]:
                keys_to_add.append((company, copy.copy(nested_key), copy.copy(dictionnary[company][key][nested_key])))
            keys_to_delete.append((company, key))

for key in keys_to_delete:
    del dictionnary[key[0]][key[1]]


for key in keys_to_add:
    dictionnary[key[0]][key[1]] = key[2]
print(dictionnary)

相关问题 更多 >

    热门问题