+ 2

Hi ! What will be the output if this code 2 or 4 ? please provide a few explainantion.

d = {k:v for k, v in['a1','b2']} d['a1'] = 1 d['b2'] = 2 print(len(d))

15th Jan 2024, 10:36 AM
Youness
10 Réponses
+ 5
the first line is a dictionary comprehension it is the same as: d = {} for k,v in ['a1','b2']: d.update({k:v}) k, v in this case will unpack each string in the list. for the first item in the list: k, v = 'a1' k='a' v='1' for the second item in the list: k, v = 'b2' k = 'b' v = '2' so initially d would become d = {'a':'1', 'b':'2'} but then you add these values: d['a1'] = 1 d['b2'] = 2 so d becomes: d = {'a':'1', 'b':'2', 'a1':1, 'b2':2} so what is len(d) ?
15th Jan 2024, 2:29 PM
Bob_Li
Bob_Li - avatar
+ 5
Youness This code declares the variable d as a dictionary and uses a loop to assign string values from a list consisting of two strings of two characters each. The result is a dictionary of two keys a and b with values 1 and 2. Then the dictionary d is supplemented with two more keys a1 and b2. As a result, the dictionary consists of four keys. Answer: 4. #d = {k:v for k, v in['a1','b2']} d = {} for k, v in ['a1','b2']: d[k] = v d['a1'] = 1 d['b2'] = 2 print(len(d), d) I hope the code is clearer for you in this format. A question for reflection: Why didn't I assign values the way it is written in the first case? for k, v in ['a1','b2']: d = {k:v}
15th Jan 2024, 2:45 PM
Solo
Solo - avatar
+ 3
Have you run the code in the code playground? That might help.
15th Jan 2024, 10:49 AM
Ausgrindtube
Ausgrindtube - avatar
+ 3
Bob_Li while I was translating my answer into English, you beat me to it. If I had seen your answer, I wouldn't have wasted time explaining myself...😎
15th Jan 2024, 3:29 PM
Solo
Solo - avatar
+ 3
Bob_Li oh no, I did not see this error in you, because when I wrote my answer I did not see your answer. I addressed this question to the author of the discussion, I only suggested that difficulties might arise when rewriting the teral expression...😎
15th Jan 2024, 3:46 PM
Solo
Solo - avatar
+ 2
Solo you're right...😅 it should be d[k]=v for k,v in ['a1','b2']: d = {k:v} is wrong. it would just overwrite d at each iteration and you would just get d = {'b':'2'} in the end.🤪 I updated my answer with another method that can use {k:v} though... because there must be an equivalent method to why k:v works in the dictionary comprehension. 😅
15th Jan 2024, 3:08 PM
Bob_Li
Bob_Li - avatar
+ 2
Solo but my solution was initially wrong. I did not test it. my bad. You did great pointing out the mistake.👍
15th Jan 2024, 3:33 PM
Bob_Li
Bob_Li - avatar
0
The output of the code will be: 2 The dictionary `d` is initialized using a dictionary comprehension with the key-value pairs ['a1', 'b2']. However, it is important to note that ['a1', 'b2'] is treated as an iterable of characters, not key-value pairs. Therefore, the resulting `d` dictionary will have two keys, 'a' and 'b', with corresponding values '1' and '2' respectively. When `len(d)` is called, it returns the number of key-value pairs in the dictionary, which is 2.
17th Jan 2024, 7:36 AM
Vashu Chaudhary
Vashu Chaudhary - avatar
0
Vashu Chaudhary but how about the two additional items added afterwards? That would make the len = 4
17th Jan 2024, 7:48 AM
Bob_Li
Bob_Li - avatar
0
The two additional items mentioned in your question are not actually added to the dictionary because the dictionary comprehension only iterates over the existing items in the list, which are `'a1'` and `'b2'`.
17th Jan 2024, 9:38 AM
Vashu Chaudhary
Vashu Chaudhary - avatar