【问题标题】:Replace a dictionary key from a list从列表中替换字典键
【发布时间】:2022-08-17 16:02:34
【问题描述】:

假设我有以下列表:

my_list= [\'aa\', \'bb\', \'cc\']

我的字典:

my_dict = {\'source\':{\'new_key\': {\'k1\': 1, \'k2\': 2, \'k3\': 3}}}

我想用列表值my_list 替换字典中的new_key 值,我想得到以下三个字典

{\'source\':{\'aa\': {\'k1\': 1, \'k2\': 2, \'k3\': 3}}}

{\'source\':{\'bb\': {\'k1\': 1, \'k2\': 2, \'k3\': 3}}}

{\'source\':{\'cc\': {\'k1\': 1, \'k2\': 2, \'k3\': 3}}}

我试过以下

for i in my_list:
    my_dict [\'source\'][f\'{i}\'] = my_dict [\'sources\'][\'new_key\']
    del my_dict [\'source\'][\'new_key\']
  • 您需要 3 个新词典。您想要列表中的字典引用还是 3 个不同的变量名?

标签: python


【解决方案1】:

您需要制作字典的深层副本,以便能够分别修改它们中的每一个

from copy import deepcopy

my_list= ['aa', 'bb', 'cc']
my_dict = {'source': {'new_key': {'k1': 1, 'k2': 2, 'k3': 3}}}

outdicts = {}

for l in my_list:
    outdicts[l] = deepcopy(my_dict)
    outdicts[l]['source'][l] = outdicts[l]['source'].pop('new_key')

print(f"{outdicts['aa'] = }")
print(f"{outdicts['bb'] = }")
print(f"{outdicts['cc'] = }")

【讨论】:

    【解决方案2】:

    问题是您不断修改唯一现有的 dict 实例,但您需要新的 dict,并将原始的 dict 保留为基础

    您需要对原件进行深层复制,修改并保存

    from copy import deepcopy
    
    my_list = ['aa', 'bb', 'cc']
    my_dict = {'source': {'new_key': {'k1': 1, 'k2': 2, 'k3': 3}}}
    
    result = []
    for item in my_list:
        value = deepcopy(my_dict)
        value['source'][item] = value['source']['new_key']
        del value['source']['new_key']
        result.append(value)
    
    print(result)
    

    如果只做这个改动,可以简化代码

    result = []
    for item in my_list:
        result.append({'source': {item: my_dict['source']['new_key']}})
    

    【讨论】:

      【解决方案3】:

      以下是创建字典的方法。你对它们做什么取决于你:

      my_dict = {'source':{'new_key': {'k1': 1, 'k2': 2, 'k3': 3}}}
      
      my_list= ['aa', 'bb', 'cc']
      
      v = my_dict['source']['new_key']
      
      for k in my_list:
          d = {'source':{k: v}}
          print(d)
      

      输出:

      {'source': {'aa': {'k1': 1, 'k2': 2, 'k3': 3}}}
      {'source': {'bb': {'k1': 1, 'k2': 2, 'k3': 3}}}
      {'source': {'cc': {'k1': 1, 'k2': 2, 'k3': 3}}}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-24
        • 2014-03-27
        • 2018-03-08
        • 2015-12-13
        • 2021-07-13
        • 1970-01-01
        • 2019-04-07
        • 1970-01-01
        相关资源
        最近更新 更多