gpt4 book ai didi

python - 使用字典理解压缩/转换嵌套列表

转载 作者:太空宇宙 更新时间:2023-11-04 03:27:06 25 4
gpt4 key购买 nike

所以我将数据结构化为嵌套列表

data = [['A', '1'], ['B', '2'], ['C', '3'], ['A', '-2'], ['B', '4'], ['C', '1'], ['A', '2'], ['B', '1'], ['C', '-5']]

我正在尝试将其转换成如下所示的输出

{'A': 1, 'C': -1, 'B': 7}

基本上把所有的A、B、C都加起来,输出成一个字典。

我写了这段给出正确答案的代码

playerSum = {}
for ele in data:
if ele[0] not in playerSum:
playerSum[ele[0]] = int(ele[1])
else:
playerSum[ele[0]] += int(ele[1])

但是,我正在尝试将上面的代码块转换为字典理解。我主要了解如何去做,但我不明白如何将 += 写成字典理解。任何关于结构的指导都会很棒。

到目前为止我有这个

playerSum = {ele[0]: int(ele[1]) if ele[0] not in playerSum else playerSum[ele[0]] += int(ele[1]) for ele in data}

编辑:所以@achampion 能够解决它。谢谢!

{key: sum(int(v) for k, v in data if k==key) for key in set(k for k, _ in data)}

最佳答案

作为理解来做是不实际的。
就像练习一样,您可以使用协同程序为您进行计数,但您实际上创建了两次字典:

from collections import defaultdict
def count():
cache = defaultdict(int)
k, v = yield
while True:
cache[k] += v
k, v = yield cache[k]

counter = count() # Create coroutine
next(counter) # Prime coroutine

data = [['A', '1'], ['B', '2'], ['C', '3'], ['A', '-2'], ['B', '4'],
['C', '1'], ['A', '2'], ['B', '1'], ['C', '-5']]

{k: counter.send((k, int(v))) for k, v in data} # Meets the challenge :)

结果:

{'A': 1, 'B': 7, 'C': -1}

或者一个真正丑陋的单行代码,它不需要协程而且不是二次方的(不是理解式):

>>> reduce(lambda d, (k,v): d.__setitem__(k, d.get(k,0)+int(v)) or d, data, {})  # Py2.7
{'A': 1, 'B': 7, 'C': -1}

最后是一个非常低效但真实的基于@Prune 的字典理解:

>>> {key: sum(int(v) for k, v in data if k==key) for key in set(k for k, _ in data)}
{'A': 1, 'B': 7, 'C': -1}

关于python - 使用字典理解压缩/转换嵌套列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32617112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com