Bạn có thể sử dụng một từ điển mới trong đó các phím là tuple
và ánh xạ nó theo các cột có khóa kéo.
d = {**{[1, k]: v for k, v in d1.items[]}, **{[2, k]: v for k, v in d2.items[]}}
df.assign[ColB=[*map[d.get, zip[df.ColA, df.ColB]]]]
ColA ColB
0 1 a
1 2 f
2 2 e
3 1 b
4 1 c
5 2 d
Hoặc chúng ta có thể dễ thương với Lambda để lập bản đồ. Trong trường hợp này, nó không quan trọng ở vị trí đầu tiên. Tôi đặt 0
tùy ý.
NOTE: I aligned the dictionaries to switch between based on their relative position in the list [0, d1, d2]
. In this case it doesn't matter what is in the first position. I put 0
arbitrarily.
df.assign[ColB=[*map[lambda x, y: [0, d1, d2][x][y], df.ColA, df.ColB]]]
ColA ColB
0 1 a
1 2 f
2 2 e
3 1 b
4 1 c
5 2 d
Vì sự mạnh mẽ, tôi sẽ tránh xa dễ thương và lập bản đồ một lambda có khả năng giá trị mặc định
df.assign[ColB=[*map[lambda x, y: {1: d1, 2: d2}.get[x, {}].get[y], df.ColA, df.ColB]]]
ColA ColB
0 1 a
1 2 f
2 2 e
3 1 b
4 1 c
5 2 d
Phương pháp số 2: Sử dụng danh sách hiểu + từ điển hiểu
Đầu vào: test_dict1 = {Hồi gfg, [4, 10], tốt nhất: [8, 6], Hồi là Hồi: [9, 3]}, test_dict2 = {6: [15, 9], 8: [[ 6, 3], 7: [9, 8], 9: [10, 11]} Đầu ra: {'Best': [6, 3, 15, 9], 'là': [10, 11]} Giải thích: Càng tốt nhất có 8 và 6, được ánh xạ tới 6, 3 và 15, 9 do đó đầu ra cho khóa đó. Đầu vào: test_dict1 = {Hồi gfg, [4, 10], tốt nhất: [18, 16], Hồi là Hồi: [9, 3]}, test_dict2 = {6: [15, 9], 8: [[ 6, 3], 7: [9, 8], 9: [10, 11]} Đầu ra: {'là': [10, 11]} Giải thích: Chỉ 9 hiện tại là khóa có thể. : test_dict1 = {“Gfg” : [4, 10], “Best” : [8, 6], “is” : [9, 3]}, test_dict2 = {6 : [15, 9], 8 : [6, 3], 7 : [9, 8], 9 : [10, 11]} Output : {‘Best’: [6, 3, 15, 9], ‘is’: [10, 11]} Explanation : “Best” has 8 and 6, which are mapped to 6, 3 and 15, 9 hence output for that key. Input : test_dict1 = {“Gfg” : [4, 10], “Best” : [18, 16], “is” : [9, 3]}, test_dict2 = {6 : [15, 9], 8 : [6, 3], 7 : [9, 8], 9 : [10, 11]} Output : {‘is’: [10, 11]} Explanation : Only 9 present as possible key.
Phương thức số 1: Sử dụng loop + setDefault [] + extend []
Sự kết hợp của các chức năng trên có thể được sử dụng để giải quyết vấn đề này. Trong đó, chúng tôi thực hiện nhiệm vụ nhận các khóa phù hợp với các giá trị bằng cách sử dụng get [] và setDefault được sử dụng để xây dựng danh sách trống để ánh xạ.
Python3
test_dict1
=
df.assign[ColB=[*map[lambda x, y: [0, d1, d2][x][y], df.ColA, df.ColB]]]
ColA ColB
0 1 a
1 2 f
2 2 e
3 1 b
4 1 c
5 2 d
0df.assign[ColB=[*map[lambda x, y: [0, d1, d2][x][y], df.ColA, df.ColB]]]
ColA ColB
0 1 a
1 2 f
2 2 e
3 1 b
4 1 c
5 2 d
1 df.assign[ColB=[*map[lambda x, y: [0, d1, d2][x][y], df.ColA, df.ColB]]]
ColA ColB
0 1 a
1 2 f
2 2 e
3 1 b
4 1 c
5 2 d
2df.assign[ColB=[*map[lambda x, y: [0, d1, d2][x][y], df.ColA, df.ColB]]]
ColA ColB
0 1 a
1 2 f
2 2 e
3 1 b
4 1 c
5 2 d
3__df.assign[ColB=[*map[lambda x, y: {1: d1, 2: d2}.get[x, {}].get[y], df.ColA, df.ColB]]]
ColA ColB
0 1 a
1 2 f
2 2 e
3 1 b
4 1 c
5 2 d
9=
df.assign[ColB=[*map[lambda x, y: [0, d1, d2][x][y], df.ColA, df.ColB]]]
ColA ColB
0 1 a
1 2 f
2 2 e
3 1 b
4 1 c
5 2 d
0df.assign[ColB=[*map[lambda x, y: {1: d1, 2: d2}.get[x, {}].get[y], df.ColA, df.ColB]]]
ColA ColB
0 1 a
1 2 f
2 2 e
3 1 b
4 1 c
5 2 d
1 df.assign[ColB=[*map[lambda x, y: [0, d1, d2][x][y], df.ColA, df.ColB]]]
ColA ColB
0 1 a
1 2 f
2 2 e
3 1 b
4 1 c
5 2 d
2The original dictionary 1 is : {'Gfg': [4, 7], 'Best': [8, 6], 'is': [9, 3]} The original dictionary 2 is : {6: [15, 9], 8: [6, 3], 7: [9, 8], 9: [10, 11]} The constructed dictionary : {'Gfg': [9, 8], 'Best': [6, 3, 15, 9], 'is': [10, 11]}4__
tuple
6tuple
7tuple
8 tuple
9 [0, d1, d2]
0[0, d1, d2]
1
tuple
6tuple
7[0, d1, d2]
4 tuple
9 [0, d1, d2]
0[0, d1, d2]
7
[0, d1, d2]
8=
0
0
0
1 0
20
3 0
4
0
50
1 0
77____73 0
9
test_dict1
0test_dict1
1
tuple
6tuple
7test_dict1
4 tuple
9 [0, d1, d2]
0test_dict1
7
Đầu ra
The original dictionary 1 is : {'Gfg': [4, 7], 'Best': [8, 6], 'is': [9, 3]} The original dictionary 2 is : {6: [15, 9], 8: [6, 3], 7: [9, 8], 9: [10, 11]} The constructed dictionary : {'Gfg': [9, 8], 'Best': [6, 3, 15, 9], 'is': [10, 11]}
Phương pháp số 2: Sử dụng danh sách hiểu + từ điển hiểu
Đây là một cách nữa trong đó vấn đề này có thể được giải quyết. Trong đó, chúng tôi trích xuất tất cả các ánh xạ bằng cách sử dụng danh sách hiểu và sau đó xây dựng từ điển mới bằng cách lập bản đồ chéo các giá trị được trích xuất.
Python3
test_dict1
=
df.assign[ColB=[*map[lambda x, y: [0, d1, d2][x][y], df.ColA, df.ColB]]]
ColA ColB
0 1 a
1 2 f
2 2 e
3 1 b
4 1 c
5 2 d
0df.assign[ColB=[*map[lambda x, y: [0, d1, d2][x][y], df.ColA, df.ColB]]]
ColA ColB
0 1 a
1 2 f
2 2 e
3 1 b
4 1 c
5 2 d
1 df.assign[ColB=[*map[lambda x, y: [0, d1, d2][x][y], df.ColA, df.ColB]]]
ColA ColB
0 1 a
1 2 f
2 2 e
3 1 b
4 1 c
5 2 d
2df.assign[ColB=[*map[lambda x, y: [0, d1, d2][x][y], df.ColA, df.ColB]]]
ColA ColB
0 1 a
1 2 f
2 2 e
3 1 b
4 1 c
5 2 d
3__df.assign[ColB=[*map[lambda x, y: {1: d1, 2: d2}.get[x, {}].get[y], df.ColA, df.ColB]]]
ColA ColB
0 1 a
1 2 f
2 2 e
3 1 b
4 1 c
5 2 d
9=
df.assign[ColB=[*map[lambda x, y: [0, d1, d2][x][y], df.ColA, df.ColB]]]
ColA ColB
0 1 a
1 2 f
2 2 e
3 1 b
4 1 c
5 2 d
0df.assign[ColB=[*map[lambda x, y: {1: d1, 2: d2}.get[x, {}].get[y], df.ColA, df.ColB]]]
ColA ColB
0 1 a
1 2 f
2 2 e
3 1 b
4 1 c
5 2 d
1 df.assign[ColB=[*map[lambda x, y: [0, d1, d2][x][y], df.ColA, df.ColB]]]
ColA ColB
0 1 a
1 2 f
2 2 e
3 1 b
4 1 c
5 2 d
2The original dictionary 1 is : {'Gfg': [4, 7], 'Best': [8, 6], 'is': [9, 3]} The original dictionary 2 is : {6: [15, 9], 8: [6, 3], 7: [9, 8], 9: [10, 11]} The constructed dictionary : {'Gfg': [9, 8], 'Best': [6, 3, 15, 9], 'is': [10, 11]}4__
tuple
6tuple
7tuple
8 tuple
9 [0, d1, d2]
0[0, d1, d2]
1
tuple
6tuple
7[0, d1, d2]
4 tuple
9 [0, d1, d2]
0[0, d1, d2]
7
[0, d1, d2]
8=
0
0
0
1 0
20
3 0
4
tuple
6tuple
7test_dict1
4 tuple
9 [0, d1, d2]
0test_dict1
7
Đầu ra
The original dictionary 1 is : {'Gfg': [4, 7], 'Best': [8, 6], 'is': [9, 3]} The original dictionary 2 is : {6: [15, 9], 8: [6, 3], 7: [9, 8], 9: [10, 11]} The constructed dictionary : {'Gfg': [9, 8], 'Best': [6, 3, 15, 9], 'is': [10, 11]}