gpt4 book ai didi

python - 包含字典元素的字典理解

转载 作者:太空宇宙 更新时间:2023-11-03 13:39:36 24 4
gpt4 key购买 nike

我有以下格式的字典:dict1 = {(0, 1): [10, 11], (1, 2): [0, 0]}

我想创建另一个字典,保持键原样但删除第二个值,最好这不应该是一个列表(因为它只包含一个元素)

dict2 = {(0, 1): 10, (1, 2): 0}(甚至 {(0, 1): [10], (1, 2): [0]})

目前我是这样做的:

dict2 = dict1
for key, value in dict2.items():
dict2[key] = value[0]

我觉得可能有一种方法可以通过字典理解来做到这一点。可能吗?

最佳答案

这种方式看起来不错... but isn't

dict2 = dict1
for key, value in dict2.items():
dict2[key] = value[0]

print(dict2) # good so far
print(dict1) # oh no!

当我们说 dict2 = dict1 时,我们所做的就是将变量名 dic2 指向存储在 dict1 中的字典。这两个名称将指向同一个地方。从表面上看,

dict2 = dict1.copy()
for key, value in dict2.items():
dict2[key] = value[0]

print(dict2) # good so far
print(dict1) # okay....

似乎可行,但您需要查找 shallow vs. deep copy如果您使用的结构比元组更​​复杂 ( specifically, mutable values )

在一行中,这相当于

dict2 = { key : val[0] for key, val in dict1.items() }

这有一个额外的好处,可以避免原始实现中的引用问题。同样,如果您有可变类型(例如,列表列表而不是整数元组,您的值仍有可能指向同一个位置,从而导致意外行为)

有一些subtle differences between dictionaries in python2 and python3 .上面的字典理解应该对两者都有效

关于python - 包含字典元素的字典理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33901075/

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