为了账号安全,请及时绑定邮箱和手机立即绑定

使用列表理解修改字典列表

使用列表理解修改字典列表

开满天机 2021-04-09 18:15:00
所以我有以下字典清单myList = [{'one':1, 'two':2,'three':3},          {'one':4, 'two':5,'three':6},          {'one':7, 'two':8,'three':9}]这只是我所拥有字典的一个例子。我的问题是,可以使用列表理解以某种方式将two所有字典中的say键修改为它们的值的两倍吗?我知道如何使用列表理解来创建字典的新列表,但是不知道如何修改它们,我想出了类似的方法new_list = { <some if condiftion> for (k,v) in x.iteritems() for x in myList  }我不确定如何在中指定条件,<some if condiftion>我想正确的嵌套列表理解格式也正确吗?我想要像这样的示例的最终输出[ {'one':1, 'two':4,'three':3},{'one':4, 'two':10,'three':6},{'one':7, 'two':16,'three':9}  ]
查看完整描述

3 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

将列表理解与dict嵌套嵌套一起使用:


new_list = [{ k: v * 2 if k == 'two' else v for k,v in x.items()} for x in myList]

print (new_list)

[{'one': 1, 'two': 4, 'three': 3}, 

 {'one': 4, 'two': 10, 'three': 6}, 

 {'one': 7, 'two': 16, 'three': 9}]


查看完整回答
反对 回复 2021-04-20
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

在python 3.5+中,您可以在PEP 448中引入的dict文字中使用新的解包语法。这将创建每个字典的副本,然后覆盖键的值two:


new_list = [{**d, 'two': d['two']*2} for d in myList]

# result:

# [{'one': 1, 'two': 4, 'three': 3},

#  {'one': 4, 'two': 10, 'three': 6},

#  {'one': 7, 'two': 16, 'three': 9}]


查看完整回答
反对 回复 2021-04-20
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

一个简单的for循环就足够了。但是,如果要使用字典理解,我发现定义映射字典比三元语句更易读和可扩展:


factor = {'two': 2}


res = [{k: v*factor.get(k, 1) for k, v in d.items()} for d in myList]


print(res)


[{'one': 1, 'two': 4, 'three': 3},

 {'one': 4, 'two': 10, 'three': 6},

 {'one': 7, 'two': 16, 'three': 9}]


查看完整回答
反对 回复 2021-04-20
  • 3 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信