我按照这篇文章创建了一些函数,这些函数在给定密钥列表的情况下获取并将值设置为嵌套字典:Access nested dictionary items via a list of keys?
# get a dict value with a list of nested keys
def getFromDict(dataDict, mapList):
return reduce(lambda d, k: d[k], mapList, dataDict)
# set a dict value with a list of nested keys
def setInDict(dataDict, mapList, value):
getFromDict(dataDict, mapList[:-1])[mapList[-1]] = value
如何使用列表推导或其他方式以Python(2.x)完成,同时避免reduce?
答案 0 :(得分:3)
您的结果不是列表,因此无法进行列表推导。试试这个:
def get_from_dict(data, keys):
for key in keys:
data = data[key]
return data
def set_in_dict(data, keys, value):
get_from_dict(data, keys[:-1])[keys[-1]] = value
答案 1 :(得分:1)
我认为这样做的更多pythonic方法是使用原始问题中的显式循环。在此处查看此问题:Python alternative to reduce()
来自链接的答案:
Guido建议不要使用reduce()
并解释为什么它会在链接blog post中的python 3.x中移动到functools
。
他建议做类似的事情:
def get_from_dict(data_dict, map_list):
for key in map_list:
data_dict = data_dict[key]
return data_dict
def set_in_dict(data_dict, map_list, value):
data_dict = get_from_dict(data_dict, map_list[:-1])
data_dict[map_list[-1]] = value
因为它更清楚发生了什么。
答案 2 :(得分:0)
你已经做的很好。你将无法做得更好,因为reduce
基本上用累加器迭代某些东西,而基本列表理解在没有任何累加器的情况下迭代。
但是,如果您使用这种嵌套字典的字符串,JSON应该是最佳选择。见http://docs.python-guide.org/en/latest/scenarios/json/