Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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 将reducelambda转换为列表理解_Python_List Comprehension_Python 2.x_Reduce - Fatal编程技术网

Python 将reducelambda转换为列表理解

Python 将reducelambda转换为列表理解,python,list-comprehension,python-2.x,reduce,Python,List Comprehension,Python 2.x,Reduce,我按照这篇文章创建了一些函数,这些函数可以在给定键列表的嵌套字典中获取和设置值: 在避免reduce的同时,如何通过pythonical(2.x)使用列表理解或其他方法来实现这一点?您的结果不是列表,因此列表理解是不可能的。试试这个: def get_from_dict(data, keys): for key in keys: data = data[key] return data def set_in_dict(data, keys, value):

我按照这篇文章创建了一些函数,这些函数可以在给定键列表的嵌套字典中获取和设置值:


在避免reduce的同时,如何通过pythonical(2.x)使用列表理解或其他方法来实现这一点?

您的结果不是列表,因此列表理解是不可能的。试试这个:

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

您的结果不是列表,因此列表理解是不可能的。试试这个:

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

我认为做这件事的更具python风格的方法是使用一个显式循环,就像你在最初的问题中所做的那样。请看这里的问题:

从链接的答案中: Guido建议不要使用
reduce()
,并解释了为什么要在链接中将其移动到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

因为它更清楚发生了什么。

我认为更像python的方法是使用一个显式循环,就像你在最初的问题中所做的那样。请看这里的问题:

从链接的答案中: Guido建议不要使用
reduce()
,并解释了为什么要在链接中将其移动到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

因为它更清楚发生了什么。

你已经做的很好。您将无法做得更好,因为
reduce
基本上是用累加器迭代某个对象,而基本列表理解则是在没有累加器的情况下迭代某个对象


但是,如果您使用这种嵌套字典的字符串,那么JSON应该是一种选择。请参见

您已经做的很好。您将无法做得更好,因为
reduce
基本上是用累加器迭代某个对象,而基本列表理解则是在没有累加器的情况下迭代某个对象


但是,如果您使用这种嵌套字典的字符串,那么JSON应该是一种选择。请参见
reduce
此处适用。
reduce
此处适用。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-我编辑了我的答案,希望能更有用。感谢@jezraelWhile的提示此链接可能会回答问题,但最好在此处包含答案的基本部分,并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能无效。-我编辑了我的答案,希望能更有用。谢谢你的提示@jezrael