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

所以我有以下字典清单


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}  ]


开满天机
浏览 154回答 3
3回答

三国纷争

将列表理解与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},&nbsp;&nbsp;{'one': 4, 'two': 10, 'three': 6},&nbsp;&nbsp;{'one': 7, 'two': 16, 'three': 9}]

Smart猫小萌

在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},#&nbsp; {'one': 4, 'two': 10, 'three': 6},#&nbsp; {'one': 7, 'two': 16, 'three': 9}]

明月笑刀无情

一个简单的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},&nbsp;{'one': 4, 'two': 10, 'three': 6},&nbsp;{'one': 7, 'two': 16, 'three': 9}]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python