将 reduce lambda 转换为列表理解
Convert reduce lambda to list comprehension
我按照这个 post 创建函数,在给定键列表的情况下将值获取和设置到嵌套字典中: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?
您的结果不是列表,因此无法理解列表。试试这个:
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
我认为更 pythonic 的方法是使用显式循环,就像您在原始问题中所做的那样。在这里查看这个问题:Python alternative to reduce()
来自链接的答案:
Guido 建议不要使用 reduce()
并解释了为什么它被移动到 functools
in python 3.x in the linked blog post.
他反而建议做类似的事情:
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
因为它更清楚发生了什么。
你已经做的很好。您将无法做得更好,因为 reduce
基本上使用 累加器 迭代某些内容,而基本列表理解在没有任何累加器的情况下迭代某些内容。
但是,如果您对此类嵌套词典进行字符串使用,JSON 应该是可行的方法。参见 http://docs.python-guide.org/en/latest/scenarios/json/
我按照这个 post 创建函数,在给定键列表的情况下将值获取和设置到嵌套字典中: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?
您的结果不是列表,因此无法理解列表。试试这个:
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
我认为更 pythonic 的方法是使用显式循环,就像您在原始问题中所做的那样。在这里查看这个问题:Python alternative to reduce()
来自链接的答案:
Guido 建议不要使用 reduce()
并解释了为什么它被移动到 functools
in python 3.x in the linked blog post.
他反而建议做类似的事情:
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
因为它更清楚发生了什么。
你已经做的很好。您将无法做得更好,因为 reduce
基本上使用 累加器 迭代某些内容,而基本列表理解在没有任何累加器的情况下迭代某些内容。
但是,如果您对此类嵌套词典进行字符串使用,JSON 应该是可行的方法。参见 http://docs.python-guide.org/en/latest/scenarios/json/