Python 根据某些条件修改口述记录列表中的键
我有一个用例,需要根据某些条件修改键名和键值。在JavaScript中,使用它非常简单 但在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
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