Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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 根据某些条件修改口述记录列表中的键_Python_Python 3.x - Fatal编程技术网

Python 根据某些条件修改口述记录列表中的键

Python 根据某些条件修改口述记录列表中的键,python,python-3.x,Python,Python 3.x,我有一个用例,需要根据某些条件修改键名和键值。在JavaScript中,使用它非常简单 但在Python中,我找不到这样的库 输入: list_is = [{'access_level': 20, 'username': 'example1'}, {'access_level': 50, 'username': 'example2'}] 输出: [{'is_admin': false, 'username': 'example1'}, {'is_admin': tr

我有一个用例,需要根据某些条件修改键名和键值。在JavaScript中,使用它非常简单

但在Python中,我找不到这样的库

输入:

list_is = [{'access_level': 20, 'username': 'example1'}, 
           {'access_level': 50, 'username': 'example2'}]
输出:

[{'is_admin': false, 'username': 'example1'}, 
 {'is_admin': true, 'username': 'example2'}]
请注意,这里的键
access\u level
更改为
is\u admin
,如果
access\u level
=
50
然后
true
或者
false
,则值会更改

在一个简单的程序中,我可以这样做:

processed_list=[]
对于范围内的i(len(列表_是)):
已处理的_对象={}
已处理的_对象[username]=列表_为[i]['username']
已处理的\u对象[is\u admin]=列表\u is[i]['access\u level']==50?对:错
已处理的\u列表。追加(已处理的\u对象)
返回已处理的\u列表

但是,由于我是Python的初学者,我想知道是否有类似Python的方法(lambda操作符、fnc或pydash)。

这是经过一些修改的代码:

def make_smth(list_is):
    processed_list = []
    for i in range(len(list_is)):
        processed_object = {}
        processed_object["username"] = list_is[i]['username']
        processed_object["is_admin"] = list_is[i]['access_level'] == 50 
        processed_list.append(processed_object)

    return processed_list

make_smth(list_is)
或者更像蟒蛇的方式

processed_list = [{"is_admin": i["access_level"] == 50, 'username': i['username']}  for i in list_is]

您可以使用
列表理解

>>> output = [dict(
               [('is_admin', v==50) if k=='access_level' else (k, v) 
                for k,v in elem.items()]
             ) 
             for elem in list_is]

>>> output
[{'is_admin': False, 'username': 'example1'},
 {'is_admin': True, 'username': 'example2'}]
或者


这将创建一个具有所需dict格式的新列表,但是,原始列表(
list_is
)的内容将更改,因为将弹出
访问级别
键。正如@schwobasegll所指出的,最好不要创建一个单独的列表,因此您可以将列表理解分配回
list\u is

因为您正在修改dict,所以创建一个新的列表没有什么意义。只需使用一个循环,
dict.pop
并在适当的位置执行即可:

for d in list_is:
    d["is_admin"] = d.pop("access_level") == 50

请澄清您是否正在搜索就地修改?在这方面,你的问题的标题和文本有点矛盾。你说我可以在“程序”之前做类似的事情,而这个“程序”不是有效的Python语法。所以你甚至没有采取那一步,而是要求“pythonic方式”?如果你无论如何都在构建新的dict,那么将原始dict修改为中间状态也没有什么意义:)Schwobasegl同意。@Wolf我没有,因为
“这将修改原始dict”
在事实上并不正确,然而,正如我所看到的,单词
modified
似乎模棱两可,因此进行了编辑。
for d in list_is:
    d["is_admin"] = d.pop("access_level") == 50