Python 包含词典元素的词典理解

Python 包含词典元素的词典理解,python,dictionary,list-comprehension,Python,Dictionary,List Comprehension,我有一本以下格式的词典: 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] 我觉得有一种方法可以通过字典理解来做到这一点

我有一本以下格式的词典: 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]
我觉得有一种方法可以通过字典理解来做到这一点。
有可能吗?

使用简单的dict comp:

>>> dict1 = {(0, 1): [10, 11], (1, 2): [0, 0]}
>>> dict2 = {key:dict1[key][0] for key in dict1}
>>> dict2
{(0, 1): 10, (1, 2): 0}
您也可以将其放在一个值列表中:

>>> dict2 = {key:dict1[key][0:1] for key in dict1}
>>> dict2
{(0, 1): [10], (1, 2): [0]}
并不是因为我使用了切片,所以它们是值/列表的副本,而不是实际的列表

这样看起来不错

当我们说
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....
似乎是可行的,但如果使用的是比元组更复杂的结构()

在一行中,这相当于

dict2 = { key : val[0] for key, val in dict1.items() }
这还可以避免原始实现中的引用问题。同样,如果您有可变类型(例如,列表列表而不是整数元组,那么您的值仍有可能指向相同的位置,从而导致意外行为)


有一些。上面的词典理解应该对这两个方面都有效,仅供参考,您的代码也将修改
dict1
。非常好的解释,非常清晰和有启发性。有一个拼写错误,你说“mutubale”,我想你是指mutable。谢谢
dict2 = { key : val[0] for key, val in dict1.items() }