2 Cách lặp lại khóa và giá trị vào từ điển dựa trên những gì đã có trong từ điển

câu hỏi được tạo ra tại Wed, May 8, 2019 12:00 AM

Tôi đang cố gắng sao chép từ điển nhiều lần dựa trên giá trị mẫu phụ trong từ điển test1.

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}

Vì vậy, trong ví dụ trên, giá trị của các Mẫu con chính là ba, do đó, từ điển được "sao chép" 3 lần với số được thêm vào cuối mỗi khóa mỗi lần lặp.

    
0
2 Câu trả lời                              2                         

Có vẻ như những gì bạn muốn làm là:

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 

Tuy nhiên, điều đó có vẻ như là một điều kỳ lạ phải làm ... Dict mà bạn tạo ra trông khó xử lý bởi phần còn lại của chương trình của bạn (phải xây dựng các khóa bằng nối chuỗi).

Bạn có chắc chắn không nên sản xuất một cái gì đó như

{('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}

hoặc thậm chí tốt hơn

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

?

Sau này dễ dàng được sản xuất bởi [dict(test3) for _ in range(n)]

    
0
2019-05-08 15: 59: 44Z
  1. À đúng rồi, `` `{('Thuộc địa', 1): 0, ('Màu', 1): 0, ('Kích thước', 1) : 0, ('Thuộc địa', 2): 0, ('Màu', 2): 0, ('Kích cỡ', 2): 0, ('Thuộc địa', 3): 0, ('Màu', 3) : 0, ('Kích thước', 3): 0} `` `Tốt hơn nhiều. Làm thế nào để tôi thực hiện điều đó?
    2019-05-08 16: 09: 25Z
  2. Vâng, phương án đầu tiên bạn đề xuất có vẻ tốt hơn nhiều. Tôi đang cố gắng thực hiện nó nhưng đang gặp khó khăn khi tìm ra nó.
    2019-05-08 18: 43: 29Z
  3. chỉ cần thay thế "%s%s" % (k, i+1) bằng (k, i+1) trong chức năng dict_mult trong câu trả lời của tôi :)
    2019-05-09 17: 10: 48Z
  4. Cảm ơn bạn rất nhiều! Bạn là MVP thật lol
    2019-05-09 18: 02: 08Z

Bạn có thể sử dụng my_dict.items() để lặp lại các khóa và giá trị cùng một lúc.

Đây là một cách để trả lời:

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}
    
0
2019-05-08 16: 01: 52Z
nguồn đặt đây