如何根据字典中已有的内容将键和值迭代到字典中

2024-06-13 13:45:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图根据dictionary test1中的subsamples值多次复制一个dictionary

test1={'Subsamples':3}
test2={'Substrate':0,'Incubation Time':0}
test3={'Colonies':0,'Color':0,'Size':0}

if test1['Subsamples']>0:
    for x in range(0,test1['Subsamples']):
        #Magic happens here

print (test1)
>>>{'Subsamples':3}
print (test2)
>>>{'Substrate1':0,'Incubation Time1':0,'Substrate2':0,'Incubation Time2':0,'Substrate3':0,'Incubation Time4':0}
print(test3) 
>>>{'Colonies1':0,'Color1':0,'Size1':0,'Colonies2':0,'Color2':0,'Size2':0,'Colonies3':0,'Color3':0,'Size3':0}

所以在上面的例子中,key子样本的值是3,所以字典被“复制”3次,每次迭代都在每个key的末尾加上数字


Tags: keysizedictionaryiftimecolorprinttest1
2条回答

您可以使用my_dict.items()同时迭代键和值

这里有一个答案:

test1 = {'Subsamples': 3}
test2 = {'Substrate': 0, 'Incubation Time': 0}
test3 = {'Colonies': 0, 'Color': 0, 'Size': 0}

def create_new_dict(dict_number, dict_to_apply):
    new_dict = {}
    size = dict_number['Subsamples']
    if size > 0:
        for x in range(0, size):
            for key, value in dict_to_apply.items():
                new_dict[key + str(x+1)] = value
    return new_dict


print(create_new_dict(test1, test2))
# {'Substrate1': 0, 'Incubation Time1': 0, 'Substrate2': 0, 'Incubation Time2': 0, 'Substrate3': 0, 'Incubation Time3': 0}
print(create_new_dict(test1, test3))
# {'Colonies1': 0, 'Color1': 0, 'Size1': 0, 'Colonies2': 0, 'Color2': 0, 'Size2': 0, 'Colonies3': 0, 'Color3': 0, 'Size3': 0}

似乎你想做的是:

def dict_mult(d, n): 
     assert n >= 0 
     ret = {} 
     for i in range(n): 
         for k, v in d.items(): 
             ret['%s%s' % (k, i+1)] = v 
     return ret 

然而,这看起来很奇怪。。。您生成的dict看起来很难被程序的其余部分处理(必须使用字符串连接来构建键)

你确定你不应该生产像这样的东西吗

{('Colonies',1):0,('Color',1):0,('Size',1):0,('Colonies',2):0,('Color',2):0,('Size',2):0,('Colonies',3):0,('Color',3):0,('Size',3):0}

或者更好

[
  {'Colonies':0,'Color':0,'Size':0},
  {'Colonies':0,'Color':0,'Size':0},
  {'Colonies':0,'Color':0,'Size':0},
]

什么

后者易于生产 [dict(test3) for _ in range(n)]

相关问题 更多 >