如何为python字典中的每个特定键添加值?(不更新其他密钥)

如何为python字典中的每个特定键添加值?(不更新其他密钥),python,dictionary,Python,Dictionary,就我而言,我有一本这样的字典 dic_ = {'btcusd': [-1.0, -1.0], 'usdjpy': [-1.0, -1.0]} symbol_list = ['a', 'b, 'c', 'd'] dict_ = dict(zip(symbol_list, [list()]*len(symbol_list))) 例如,我想使用以下代码更新密钥“usdjpy” dic_['usdjpy'].append(1) 但是,它会更新此字典中的所有其他键,并给出如下结果 {

就我而言,我有一本这样的字典

dic_ = {'btcusd': [-1.0, -1.0],
        'usdjpy': [-1.0, -1.0]}
symbol_list = ['a', 'b, 'c', 'd']
dict_ = dict(zip(symbol_list, [list()]*len(symbol_list)))
例如,我想使用以下代码更新密钥“usdjpy”

dic_['usdjpy'].append(1)
但是,它会更新此字典中的所有其他键,并给出如下结果

{'btcusd': [-1.0, -1.0, 1],
 'usdjpy': [-1.0, -1.0, 1]}
那么如何解决这个问题呢

我的期望结果如下

{'btcusd': [-1.0, -1.0],
 'usdjpy': [-1.0, -1.0, 1]}

问题发生在字典初始化期间。进行检查,两个列表的id相同。i、 e.两个列表相同的内存

> id('btcusd') == id('usdjpy')
True
为了复制这个问题,我在这里初始化了a,b的a列表

> list = ['a','b']
> dic_ = dict.fromkeys(list, [-1.0,1.0])
> dic_['a'] is dic['b']
True
您可以使用列表理解对问题进行排序

> dic_ = {key: [-1.0,1.0] for key in list}
> dic_['a'] is dic_['b']
False
就您而言,问题在于您的初始化:

dict_ = dict(zip(symbol_list, [list()]*len(symbol_list)))
仅用于演示
[list()]*len(symbol_list)


问题发生在字典初始化期间。进行检查,两个列表的id相同。i、 e.两个列表相同的内存

> id('btcusd') == id('usdjpy')
True
为了复制这个问题,我在这里初始化了a,b的a列表

> list = ['a','b']
> dic_ = dict.fromkeys(list, [-1.0,1.0])
> dic_['a'] is dic['b']
True
您可以使用列表理解对问题进行排序

> dic_ = {key: [-1.0,1.0] for key in list}
> dic_['a'] is dic_['b']
False
就您而言,问题在于您的初始化:

dict_ = dict(zip(symbol_list, [list()]*len(symbol_list)))
仅用于演示
[list()]*len(symbol_list)


为了得到这个结果,你一定在做别的事情。 我试过了,效果很好

dic_ = {'btcusd': [-1.0, -1.0],
        'usdjpy': [-1.0, -1.0]}
dic_['usdjpy'].append(1)
print(dic_)
输出

{'btcusd': [-1.0, -1.0], 'usdjpy': [-1.0, -1.0, 1]}

为了得到这个结果,你一定在做别的事情。 我试过了,效果很好

dic_ = {'btcusd': [-1.0, -1.0],
        'usdjpy': [-1.0, -1.0]}
dic_['usdjpy'].append(1)
print(dic_)
输出

{'btcusd': [-1.0, -1.0], 'usdjpy': [-1.0, -1.0, 1]}

这个问题的根源来自我对字典的定义。比如我帖子下的@yatu评论。 例如,如果我像这样生成字典

dic_ = {'btcusd': [-1.0, -1.0],
        'usdjpy': [-1.0, -1.0]}
symbol_list = ['a', 'b, 'c', 'd']
dict_ = dict(zip(symbol_list, [list()]*len(symbol_list)))
然后使用普通的
.append()
方法进行追加。它将为该
目录中的所有值列表追加

但是如果以另一种方式创建
dict\uuz
,如

symbol_list = ['a', 'b', 'c', 'd']
dict_ = {}
for x in range(0, len(symbol_list)):
    dict_[symbol_list[x]]= list()
然后
append()
方法将根据需要工作


原因在这篇文章中得到了详细的回答:

这个问题的根源来自我定义字典的方式。比如我帖子下的@yatu评论。 例如,如果我像这样生成字典

dic_ = {'btcusd': [-1.0, -1.0],
        'usdjpy': [-1.0, -1.0]}
symbol_list = ['a', 'b, 'c', 'd']
dict_ = dict(zip(symbol_list, [list()]*len(symbol_list)))
然后使用普通的
.append()
方法进行追加。它将为该
目录中的所有值列表追加

但是如果以另一种方式创建
dict\uuz
,如

symbol_list = ['a', 'b', 'c', 'd']
dict_ = {}
for x in range(0, len(symbol_list)):
    dict_[symbol_list[x]]= list()
然后
append()
方法将根据需要工作


原因在这篇文章中得到了详细的回答:

您是如何创建dict的?因为我需要生成许多格式相同的dict,所以我通过dict=dict(zip(symbol\u list,[list()]*len(symbol\u list))创建函数可能重复了您是如何创建dict的?因为我需要生成许多具有相同格式的dict,所以我通过dict=dict(zip(symbol_list,[list()]*len(symbol_list))创建函数可能重复了