Python 为设置值存储字典值的路径

Python 为设置值存储字典值的路径,python,dictionary,path,Python,Dictionary,Path,考虑一个包含一个人的口述: person = {} person['name'] = 'Jeff Atwood' person['address'] = {} person['address']['street'] = 'Main Street' person['address']['zip'] = '12345' person['address']['city'] = 'Miami' 如何存储字典中某个位置的路径以写入值? # Set city (Existing field) city_f

考虑一个包含一个人的口述:

person = {}
person['name'] = 'Jeff Atwood'
person['address'] = {}
person['address']['street'] = 'Main Street'
person['address']['zip'] = '12345'
person['address']['city'] = 'Miami'
如何存储字典中某个位置的路径以写入值?

# Set city (Existing field)
city_field = ['address', 'city']
person[city_field] = 'London'  // Obviously won't work!

# Set country (New field)
country_field = ['address', 'country']
person[city_country] = 'UK'  // Obviously won't work!
请注意,我以前问过。

使用元组作为索引

city_field = ('address', 'city')    
country_field = ('address', 'country')
用法:

>>> person = {}
>>> city_field = ('address', 'city')    
>>> country_field = ('address', 'country')
>>> person[city_field] = 'Miami'
>>> person[country_field] = 'UK'
>>> person
{('address', 'country'): 'UK', ('address', 'city'): 'Miami'}

明白了!事实上,我的同事莫斯是这件事的幕后策划者:

def set_path(someDict, path, value):
    for x in path[::-1]:
        value = {x: value}
    return deepupdate(someDict, value)


def deepupdate(original, update):
    for key, value in original.items(): 
        if not key in update:
            update[key] = value
        elif isinstance(value, dict):
            deepupdate(value, update[key]) 
    return update


person = {}
person = set_path(person, ['name'], 'Shalom')
person = set_path(person, ['address', 'city'], 'Toronto')
person = set_path(person, ['address', 'street'], 'Baddessa')

pprint(person)
返回:

{
    'address': {
        'city': 'Toronto',
        'street': 'Baddessa'
    },
    'name': 'Shalom'
}

这取决于用户Stanislav是否优秀。

对于Classic来说似乎是一个很好的用例,我认为没有内置的功能。您可以扩展
dict
来实现它、使用类、使用帮助函数等。谢谢,但这对已经使用的现有词典没有帮助。